2012-02-08 56 views
13

我有一些列表,我要在我的程序中使用,但我需要確保它們都是相同的長度,或者我在我的代碼中稍後會遇到問題。Pythonic的方式來檢查大量列表的長度是相同的

在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 

是否有更好或更Python的方式來做到這一點?

回答

24

假設您有一個非空的列表列表,例如,

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

+1可能退出,早在my_list [1]時......其他一些缺乏這個。 – Droogans 2012-02-09 22:26:11

8
len(set(len(x) for x in l)) <= 1 
+3

當'l'爲空時,可以用'<= 1'來處理這種情況... – 2012-02-09 11:31:08

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

功能Python的一個位:

>>> len(set(map(len, (a, b, c)))) == 1 
False 
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.' 
相關問題