python - 如何删除列表中具有不同顺序的相同元素?
问题描述
例如,我正在研究一种给定大小“ k ”和整数“ n ”的方法,我可以从{1...n}生成具有“ k ”长度的子集。
到目前为止,这是我的代码:
def combinations(k,lista,comb):
if(len(comb)==k):
print(comb)
else:
for i in range(len(lista)):
combinations(k,lista,comb + str(lista[i]))
def starter(n,k):
lista = []
for i in range(1,n+1):
lista.append(i)
combinations(k,lista,"")
starter(5,3)
的输出starter(5,3)
是:
111
112
113
114
115
121
122
123
124
125
131
132
133
134
135
.
.
.
545
551
552
553
554
555
我的问题是它是重复的,如您所见,我在输出中有 545 和 554(以及 455;未显示),而在这种情况下,排序无关紧要,因此我应该保留 545 或 554 或 455。我也输出中有 332 以及 323 和 233,这三个被认为是“重复的”,我只需要保留一个。
如何修改我的代码以对此进行过滤?
编辑:在我的代码中“k”是“m”,我修复了它以避免误解。
Edit2:我确实知道我可以使用 itertools,但我正在尝试解决所有问题(目前),而不依赖于库或包。
解决方案
我会为此使用 itertools 函数。这个功能对你有用吗?
from itertools import combinations
list(combinations([1,2,3,4,5,6,7,8,9,0], 3))
有关 itertools 函数的更多信息:https ://docs.python.org/2/library/itertools.html#itertool-functions
推荐阅读
- django - 如何在不刷新的情况下将值从 python 更新到模板?姜戈
- c# - 以线程安全的方式使用 DbContext 进行异步搜索
- sql - 如何使用 Oracle 将此输入转换为数字
- javascript - 我可以使用函数来确定日期数据类型的最小值和最大值吗
- node.js - 续集方言问题
- node.js - 当我启动下面的代码时,我不断收到此错误
- javascript - Webpack - 动态加载 - 多个文件
- bash - Ubuntu:将 SFDX (Salesforce) 添加到 bash 路径中断 npm
- javascript - 如何在 Vue 3 的 Vue Router 中获取 cookie?这个在 router/index.js 中未定义
- html - XSL 模板适用于标记但不适用于属性