我有以下整数列表,我需要将它们相互比较:
compare = [[2,4,5,7,8,10,12],[1,3,5,8,9,10,12],[1,2,4,6,8,10,11,12],[2,3,4,6,7,9,12]]
即使你不能在Python中的列表中命名列表(我认为),我们也只需要调用每个子列表a,b,c和d。
我想做的是制作一个for循环,可以比较2,3或者所有列表中是否存在任何一个整数。它本身的循环很简单,它遍历a-d中的所有整数,但是进行比较的条件非常复杂,或者可能只是长时间的缠绕,例如:
if i in a and i in b, or i in a and i in c... or i in a and i in b and i in c... or i in (every list):
pattern.append (i)
显然这是不切实际的。我找到了问题的解决方案,但无济于事。还有,&和|操作员无论如何都可以使用,还是应该坚持使用AND和OR?
提前感谢您的帮助!
答案 0 :(得分:2)
因此,您只想对c
中的值进行迭代,并检查它是否在其他任何列表(a, b, d)
中?然后你可以使用any()
内置来实现这个目标:
compare = [
[2, 4, 5, 7, 8, 10, 12],
[1, 3, 5, 8, 9, 10, 12],
[1, 2, 4, 6, 8, 10, 11, 12],
[2, 3, 4, 6, 7, 9, 12]
]
a, b, c, d = compare
pattern = []
for value in c:
if any(value in lst for lst in (a, b, d)):
pattern.append(value)
第a, b, c, d = compare
行正在使用list unpacking将compare
中的4个子列表中的每一个分配给一个单独的变量,而any()
中的表达式称为{{ {3}}
答案 1 :(得分:2)
我建议使用itertools.chain
链接所有元素,然后计算所需元素的数量:
>>> import itertools
>>> new_list=list(itertools.chain(*compare))
[2, 4, 5, 7, 8, 10, 12, 1, 3, 5, 8, 9, 10, 12, 1, 2, 4, 6, 8, 10, 11, 12, 2, 3, 4, 6, 7, 9, 12]
>>> pattern=[i for i in new_list if new_list.count(i)>2]
>>> pattern
[2, 4, 8, 10, 12, 8, 10, 12, 2, 4, 8, 10, 12, 2, 4, 12]
答案 2 :(得分:1)
在Set()上,您可以使用交集并查找两个列表中的所有值。
a = [2,4,5,7,8,10,12]
b = [1,3,5,8,9,10,12]
set(a).intersection(set(b))
=> set([8, 10, 12, 5])
答案 3 :(得分:1)
制作一系列布尔值,如下所示:
present = [any_given_integer in L for L in compare]
现在存在的值为[True, True, False, False]
等
然后你可以做以下测试:
if present.count(True) == 2:
...
或
if all(present):
...
等