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ď č. 1Za 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."