2012-02-08 3 views
13

私のプログラムで使用するリストはたくさんありますが、それらはすべて同じ長さであることを確認する必要があります私のコードで後で問題を起こすつもりです。たくさんのリストの長さが同じであることを確認するPythonicの方法

Pythonでこれを行うには、どのような方法が最適ですか?

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

私はのような何かを行うことができます::私は3つのリストを持っている場合、例えば

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

' my_list [1] 'の早期に終了する可能性があります。これが欠けている。 – Droogans

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

'l ='が空の場合を処理するために '<= 1'を行うことができます... –

3

maxminへの各呼び出しは、リスト全体をトラバースしますが、実際に行う必要はありません。あなたは1つのトラバーサルで所望の特性を確認することができます。

これは、リストの1が、最初は異なる長さを持っている場合も、短絡意志
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.' 
関連する問題