Comprobando si una lista de listas tiene listas del mismo tamaño

Necesito validar si mi lista de listas tiene listas de igual tamaño en 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 

Podría escribir un bucle para iterar sobre la lista y verificar el tamaño de cada sub-lista. ¿Hay alguna forma más pythonica de lograr el resultado?

 all(len(i) == len(myList[0]) for i in myList) 

Para evitar incurrir en la sobrecarga de len (myList [0]) para cada elemento, puede almacenarlo en una variable

 len_first = len(myList[0]) if myList else None all(len(i) == len_first for i in myList) 

Si también quieres poder ver por qué no todos son iguales

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

Agrupará las listas por longitudes para que pueda ver fácilmente la impar

Tu podrías intentar:

 test = lambda x: len(set(map(len, x))) == 1 test(myList1) # True test(myList4) # False 

Básicamente, obtienes la longitud de cada lista y haces un conjunto a partir de esas longitudes, si contiene un solo elemento, entonces cada lista tiene la misma longitud

 def equalSizes(*args): """ # This should pass. It has two lists.. both of length 2 >>> equalSizes([1,1] , [1,1]) True # This should pass, It has three lists.. all of length 3 >>> equalSizes([1,1,1] , [1,1,1], [1,1,1]) True # This should pass, It has three lists.. all of length 2 >>> equalSizes([1,1] , [1,1], [1,1]) True # This should FAIL. It has three list.. one of which is different that the other >>> equalSizes([1,1,] , [1,1,1], [1,1,1]) False """ len0 = len(args[0]) return all(len(x) == len0 for x in args[1:]) 

Para probarlo, guárdelo en un archivo so.py y ejecútelo así:

 $ 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 

Si quieres un poco más de datos en casos de falla, podrías hacer:

 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