只保留唯一不同的是ord的列表的唯一实例

2024-06-16 09:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

使用此代码:

from itertools import product

list1 = ['Gabe', 'Taylor', 'Kyle', 'Jay']
list2 = ['Gabe', 'Taylor', 'Kyle', 'Jay', 'James', 'John', 'Tyde','Chris', 'Bruno', 'David']
list3 = ['Gabe', 'Taylor', 'Kyle', 'Jay', 'James', 'John', 'Tyde','Chris', 'Bruno', 'David']
list4 = ['Kyle', 'James', 'John', 'Tyde','Bruno', 'Drew', 'Chris']
list5 = ['James', 'John', 'Brendan','Tim', 'Drew' ]

FinalList = []

for x in product(list1, list2, list3, list4, list5):
    # check for duplicates
    if len(set(x)) == 5:
        FinalList.append(x)

# to print
for x in FinalList:
    print x

我打印出所有的单子。然而,许多打印的列表是唯一的,只是因为它们是不同顺序的相同元素。你知道吗

如何更改代码,以便仅打印尚未打印的列表(只是顺序不同)?你知道吗


Tags: 代码forproductjohnchriskyletaylorlist2
2条回答

不必像您那样检查集合的大小,而是将每个集合也存储在一个集合中(这样可以简化查找)。你知道吗

然后检查是否您已经知道set(x);如果知道,请跳过它,否则将其放入已知的集合中。你知道吗

要在集合中存储集合,必须使用frozenset而不是set,使内部集合不可变。你知道吗

工作代码:

from itertools import product

list1 = ['Gabe', 'Taylor', 'Kyle', 'Jay']
list2 = ['Gabe', 'Taylor', 'Kyle', 'Jay', 'James', 'John', 'Tyde','Chris', 'Bruno', 'David']
list3 = ['Gabe', 'Taylor', 'Kyle', 'Jay', 'James', 'John', 'Tyde','Chris', 'Bruno', 'David']
list4 = ['Kyle', 'James', 'John', 'Tyde','Bruno', 'Drew', 'Chris']
list5 = ['James', 'John', 'Brendan','Tim', 'Drew' ]



def FindUniques(*lists):
    already_seen = set()
    result = []
    for x in product(*lists):
        icicle = frozenset(x)
        if icicle not in already_seen:
            result.append(x)
            already_seen.add(icicle)
    return result

final_list = FindUniques(list1, list2, list3, list4, list5)

# make sure that each element in final_list, independent of elemet order, is unique
assert len(final_list) == len(set(tuple(sorted(list(x))) for x in final_list))

# to print
for x in final_list:
    print x

frozenset是可散列的,不关心其内容的顺序。只需为final_data使用一个集合而不是一个列表,具有不同顺序的相同名称的条目将合并为final_data中的一个条目:

final_data = set()
for x in product(list1, list2, list3, list4, list5):
    datum = frozenset(x)
    if len(datum) == 5:
        final_data.add(datum)

相关问题 更多 >