List 检查列表列表是否具有相同大小的列表

List 检查列表列表是否具有相同大小的列表,list,python,List,Python,我需要验证我的列表在python中是否具有相同大小的列表 myList1 = [ [1,1] , [1,1]] // This should pass. It has two lists.. both of length 2 myList2 = [ [1,1,1] , [1,1,1], [1,1,1]] // This should pass, It has three lists.. all of length 3 myList3 = [ [1,1] , [1,1], [1,1]] // Th

我需要验证我的列表在python中是否具有相同大小的列表

myList1 = [ [1,1] , [1,1]] // This should pass. It has two lists.. both of length 2
myList2 = [ [1,1,1] , [1,1,1], [1,1,1]] // This should pass, It has three lists.. all of length 3
myList3 = [ [1,1] , [1,1], [1,1]] // This should pass, It has three lists.. all of length 2
myList4 = [ [1,1,] , [1,1,1], [1,1,1]] // This should FAIL. It has three list.. one of which is different that the other 
我可以编写一个循环来遍历列表并检查每个子列表的大小。是否有一种更为类似于蟒蛇的方法来达到这个效果。

您可以尝试:

test = lambda x: len(set(map(len, x))) == 1

test(myList1) # True
test(myList4) # False
基本上,您可以得到每个列表的长度,并根据这些长度进行设置,如果它包含单个元素,则每个列表都具有相同的长度

all(len(i) == len(myList[0]) for i in myList)
为了避免每个项目产生len(myList[0])的开销,可以将其存储在变量中

len_first = len(myList[0]) if myList else None
all(len(i) == len_first for i in myList)
如果你还想知道为什么他们不平等

from itertools import groupby
groupby(sorted(myList, key=len), key=len)

将按长度对列表进行分组,以便您可以轻松查看单数

如果您想在故障情况下获得更多数据,可以执行以下操作:

myList1 = [ [1,1] , [1,1]]
lens = set(itertools.imap(len, myList1))
return len(lens) == 1
# if you have lists of varying length, at least you can get stats about what the different lengths are
要测试它,请将其保存到文件
so.py
,并按如下方式运行:

$ python -m doctest so.py -v
Trying:
    equalSizes([1,1] , [1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1,1] , [1,1,1], [1,1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1] , [1,1], [1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1,] , [1,1,1], [1,1,1])
Expecting:
    False
ok

如果序列的早期有不同的长度,那么这不是很有效。您仍然会不必要地检查其余的列表。我在这里看到的问题是(如果编译器没有优化它),您正在计算索引0处的列表长度n次加1次,这使得计算长度为2*n。@SanSS,长度不是计算的,它是一个属性。如果你真的需要一个小小的速度提升,你可以把它存储在一个变量中。如果列表为空,那么您就必须使用特殊情况,使其工作起来有点困难,
all
的参数是否应该嵌套在列表中
all([len(i)==len(myList[0])
@FriskyGrub,问题中的所有示例都是嵌套列表,但它可以用于任何对象的列表,只要它们都有
len
,我不明白为什么这值得投反对票?如果列表很大,使用
*args
可能不是一个好主意,因为您将制作一份副本)。查看我的答案,了解处理
len(args)==0的情况的技巧
$ python -m doctest so.py -v
Trying:
    equalSizes([1,1] , [1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1,1] , [1,1,1], [1,1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1] , [1,1], [1,1])
Expecting:
    True
ok
Trying:
    equalSizes([1,1,] , [1,1,1], [1,1,1])
Expecting:
    False
ok