2012-02-08 4 views
13

मेरे पास कई कार्यक्रम हैं जो मैं अपने कार्यक्रम में उपयोग करने जा रहा हूं, लेकिन मुझे यह सुनिश्चित करने की ज़रूरत है कि वे सभी एक ही लंबाई हैं, या मैं मैं बाद में अपने कोड में समस्याएं प्राप्त करने जा रहा हूं।पाइथोनिक तरीका यह जांचने के लिए कि बहुत सारी सूचियों की लंबाई समान है

पायथन में ऐसा करने का सबसे अच्छा तरीका क्या है?

उदाहरण के लिए

, अगर मैं तीन सूचियों है:

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 

वहाँ यह करने के लिए एक बेहतर या अधिक pythonic तरीका है

उत्तर

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

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

'l = खाली होने पर मामले को संभालने के लिए' <= 1' कर सकता है ... –

3

max और min पर प्रत्येक कॉल पूरी सूची को पार करेगा, लेकिन आपको वास्तव में ऐसा करने की आवश्यकता नहीं है; आप एक ट्रेवर्सल साथ वांछित संपत्ति के लिए जाँच कर सकते हैं:

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

कार्यात्मक अजगर के बारे में थोड़ी:

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

तो एल लंबाई की सूची है:

d=[a,b,c] 
if len(set(len(x) for x in d)) ==1: 
    print 'Yay. List lengths are same.' 
: मूल सूचियों का उपयोग अन्यथा

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

,, एक सूचियों की एक सूची बना सकते हैं