首页 > 解决方案 > 如何删除列表中具有不同顺序的相同元素?

问题描述

例如,我正在研究一种给定大小“ 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,但我正在尝试解决所有问题(目前),而不依赖于库或包。

标签: python

解决方案


我会为此使用 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


推荐阅读