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