比较python中三个列表的长度

时间:2013-05-23 18:02:15

标签: python

有没有更好的方法来比较三个列表的长度,以确保它们除了在每组变量之间进行比较之外都是相同的大小?如果我想检查长度在十个列表上相同怎么办?我该怎么做呢?

3 个答案:

答案 0 :(得分:17)

使用all()

length = len(list1)
if all(len(lst) == length for lst in [list2, list3, list4, list5, list6]):
    # all lists are the same length

或者找出是否有任何列表有不同的长度:

length = len(list1)
if any(len(lst) != length for lst in [list2, list3, list4, list5, list6]):
    # at least one list has a different length

请注意,all()any()会短路,因此,例如,如果list2的长度不同,则不会执行list3到{{1}的比较}}

如果您的列表存储在列表或元组中而不是单独的变量中:

list6

答案 1 :(得分:3)

假设您的列表存储在列表中(称为my_lists),请使用以下内容:

print len(set(map(len, my_lists))) <= 1

这将计算my_lists中所有列表的长度,并将这些长度放入一个集合中。如果它们都相同,则该集合将包含一个元素(或零,您没有列表)。

答案 2 :(得分:1)

使用itertools.combinations()

的一个班轮
import itertools

l1 = [3,4,5]
l2 = [4,5,7]
l3 = [5,6,7,8,3]

L = [l1, l2, l3]

verdict = all([len(a)==len(b) for a,b in list(itertools.combinations(L,2))])

列表的第一个构建列表L。然后使用list(itertools.combinations(L,2))

查询L中所有两个元素的集合
>>> list(itertools.combinations(L,2))
[([3, 4, 5], [4, 5, 7]), ([3, 4, 5], [5, 6, 7, 8, 3]), 
           ([4, 5, 7], [5, 6, 7, 8, 3])]

然后测试此列表中每对的长度。最后,使用all()取布线的交叉点。

>>> verdict
False

哪个是对的。让我们试试相同大小的试用清单。

l1 = [3,4,5]
l2 = [4,5,7]
l3 = [5,6,7]

L = [l1, l2, l3]

verdict=all([len(a)==len(b) for a,b in list(itertools.combinations(L,2))])

我们得到了

>>> verdict
True