gpt4 book ai didi

python - itertools.product 消除重复元素

转载 作者:太空狗 更新时间:2023-10-30 00:26:34 25 4
gpt4 key购买 nike

当我使用 itertools.product 时,如何跳过迭代中具有重复元素的元组? ?或者说,有没有办法在迭代中不查看它们?因为如果列表数量太多,跳过可能会很耗时。

Example,
lis1 = [1,2]
lis2 = [2,4]
lis3 = [5,6]

[i for i in product(lis1,lis2,lis3)] should be [(1,2,5), (1,2,6), (1,4,5), (1,4,6), (2,4,5), (2,4,6)]

它不会有 (2,2,5)(2,2,6) 因为 2 在这里是重复的。我该怎么做?

最佳答案

itertools 通常适用于输入中唯一的位置,而不是唯一的。因此,当您想要删除重复值时,通常必须对 itertools 结果序列进行后处理,或者“自己动手”。因为在这种情况下后处理效率非常低,所以请自己动手:

def uprod(*seqs):
def inner(i):
if i == n:
yield tuple(result)
return
for elt in sets[i] - seen:
seen.add(elt)
result[i] = elt
for t in inner(i+1):
yield t
seen.remove(elt)

sets = [set(seq) for seq in seqs]
n = len(sets)
seen = set()
result = [None] * n
for t in inner(0):
yield t

然后,例如,

>>> print list(uprod([1, 2, 1], [2, 4, 4], [5, 6, 5]))
[(1, 2, 5), (1, 2, 6), (1, 4, 5), (1, 4, 6), (2, 4, 5), (2, 4, 6)]
>>> print list(uprod([1], [1, 2], [1, 2, 4], [1, 5, 6]))
[(1, 2, 4, 5), (1, 2, 4, 6)]
>>> print list(uprod([1], [1, 2, 4], [1, 5, 6], [1]))
[]
>>> print list(uprod([1, 2], [3, 4]))
[(1, 3), (1, 4), (2, 3), (2, 4)]

这会更有效率,因为甚至不会考虑重复值(无论是在输入可迭代对象内还是跨输入对象)。

关于python - itertools.product 消除重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com