/ / Pythonic spôsob, ako skontrolovať, či sú dĺžky zoznamov rovnaké - python, list, if-Statement

Pythonic spôsob, ako zistiť, že dĺžky veľa zoznamov sú rovnaké - python, zoznam, ak vyhlásenie

Mám niekoľko zoznamov, ktoré budem používať vo svojom programe, ale musím si byť istý, že sú všetky rovnako dlhé, alebo budem mať problémy neskôr v kóde.

Aký je najlepší spôsob, ako to dosiahnuť v Pythone?

Napríklad, ak mám tri zoznamy:

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

Mohol by som urobiť niečo ako:

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

Existuje lepší alebo viac pythonický spôsob, ako to urobiť?

odpovede:

24 pre odpoveď č. 1

Za predpokladu, že nemáte neprázdny zoznam zoznamov, napr.

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

môžete použiť

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

Tým dôjde ku skratu, takže zastaví kontrolu pri výskyte prvého zoznamu s nesprávnou dĺžkou.


8 pre odpoveď č. 2
len(set(len(x) for x in l)) <= 1

5 pre odpoveď č. 3

Trochu funkčného Pythonu:

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

3 pre odpoveď č. 4

Každý hovor na max a min bude prechádzať celým zoznamom, ale to naozaj nemusíte robiť; môžete si skontrolovať, či sa jedná o požadovanú nehnuteľnosť, jedným prechodom:

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:])

Ak dôjde k skratu v jednom zo zoznamov, bude to tiež skratovať.


0 pre odpoveď č. 5

Ak l je zoznam dĺžok:

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

Inak by bolo možné pomocou pôvodných zoznamov vytvoriť zoznam zoznamov:

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