比较两个以上的列表



我有5个列表,我试图相互比较。我想知道这样做的有效方法是什么:

l0 = [1,2,3,4,5]
l1 = [3,4,5,6,7]
l2 = [1,2,3,4,5]
l3 = [3,3,3,5,6]
l4 = [1,2,3,4,5]

我想检查l1 == l2等等。我可以通过使用for循环来做到这一点,但这听起来并不高效:


l = [l0, l1, l2, l3, l4]
for i in range(5):
for k in range(5):
if l[i] == l[k]:
print(f"l{i} is equal to l{k}")
else:
print(f"l{i} is not equal to l{k}")

在for循环中可以看到,两个列表被多次比较,即当l0的循环运行时,l0l1进行一次比较,当l1的循环运行时,第二次比较。

是否有一种有效的方法来比较列表?请注意,这个订单对我来说很重要,所以我不能使用set()counter()。任何帮助都是非常感激的,并提前感谢您的时间和精力

@Thomas的解决方案是解决这个问题的直接方法:

使用@Thomas提供的逻辑:

l = [l0, l1, l2, l3, l4]
for i in range(4):
for k in range(i + 1, 5):
if l[i] == l[k]:
print(f"l{i} is equal to l{k}")
else:
print(f"l{i} is not equal to l{k}")

与上面的逻辑一样,在i循环中,您可以将其范围设置为5,但从1开始:

for i in range(1, 5):

然后你不需要为k范围循环增加i,让k循环:

for k in range(i, 5):

但是itertools已经为我们完成了这个逻辑,使用itertools.combinations将减少代码的长度,因此它看起来更干净:

from itertools import combinations
for i, k in combinations(range(5), 2):
if l[i] == l[k]:
print(f"l{i} is equal to l{k}")
else:
print(f"l{i} is not equal to l{k}")

两个代码输出:

l0 is not equal to l1
l0 is equal to l2
l0 is not equal to l3
l0 is equal to l4
l1 is not equal to l2
l1 is not equal to l3
l1 is not equal to l4
l2 is not equal to l3
l2 is equal to l4
l3 is not equal to l4

k-循环从i+1开始而不是从0开始,这样就不会有向后比较。让i循环在4处结束,这样i+1仍然是一个有效的索引。

输出:

l0 is not equal to l1
l0 is equal to l2
l0 is not equal to l3
l0 is equal to l4
l1 is not equal to l2
l1 is not equal to l3
l1 is not equal to l4
l2 is not equal to l3
l2 is equal to l4
l3 is not equal to l4

相关内容

  • 没有找到相关文章