Pythonic方法检查许多列表的长度是否相同

时间:2012-02-08 20:05:11

标签: python list if-statement

我将在我的程序中使用许多列表,但我需要确保它们的长度相同,否则我将在以后的代码中遇到问题。

在Python中执行此操作的最佳方法是什么?

例如,如果我有三个列表:

a = [1, 2, 3]
b = ['a', 'b']
c = [5, 6, 7]

我可以这样做:

l = [len(a), len(b), len(c)]
if max(l) == min(l):
   # They're the same

有没有更好或更多的Pythonic方式来做到这一点?

5 个答案:

答案 0 :(得分:25)

假设您有一个非空的列表列表,例如

my_list = [[1, 2, 3], ['a', 'b'], [5, 6, 7]]

你可以使用

n = len(my_list[0])
if all(len(x) == n for x in my_list):
    # whatever

这会短路,所以当遇到长度错误的第一个列表时它会停止检查。

答案 1 :(得分:8)

len(set(len(x) for x in l)) <= 1

答案 2 :(得分:6)

一些功能性的Python:

>>> len(set(map(len, (a, b, c)))) == 1
False

答案 3 :(得分:3)

maxmin的每次调用都会遍历整个列表,但您并不需要这样做;您可以通过一次遍历检查所需的属性:

def allsamelength(lst_of_lsts):
    if len(lst_of_lsts) in (0,1): return True
    lfst = len(lst_of_lsts[0])
    return all(len(lst) == lfst for lst in lst_of_lsts[1:])

如果其中一个列表与第一个列表的长度不同,这也会短路。

答案 4 :(得分:0)

如果l是长度列表:

l = [len(a), len(b), len(c)]
if len(set(l))==1:
    print 'Yay. List lengths are same.'

否则,使用原始列表,可以创建列表列表:

d=[a,b,c]
if len(set(len(x) for x in d)) ==1:
    print 'Yay. List lengths are same.'