2013-02-12 27 views
23

मैंने इस फ़ंक्शन को सूचियों की सूची में टुपल्स की सूची बदलने के लिए लिखा है। क्या ऐसा करने का एक और सुरुचिपूर्ण/पायथनिक तरीका है?सूचियों की सूची में tuples की एक सूची को बदलें

def get_list_of_lists(list_of_tuples): 
    list_of_lists = []               
    for tuple in list_of_tuples: 
     list_of_lists.append(list(tuple)) 

    return list_of_lists 

उत्तर

34

आप list comprehension उपयोग कर सकते हैं:

>>> list_of_tuples = [(1, 2), (4, 5)] 
>>> list_of_lists = [list(elem) for elem in list_of_tuples] 

>>> list_of_lists 
[[1, 2], [4, 5]] 
+0

मैंने सूची सूची समझाते हुए एक लिंक जोड़ने के लिए संपादित किया है। –

15

जबकि सूची समझ एक पूरी तरह से वैध जवाब है, तो आप सिर्फ प्रकार बदल रहे हैं के रूप में, यह विकल्प, the map() built-in पर विचार के लायक हो सकता है:

>>> list_of_tuples = [(1, 2), (4, 5)] 
>>> map(list, list_of_tuples) 
[[1, 2], [4, 5]] 

map() अंतर्निहित बस दिए गए प्रत्येक तत्व के लिए एक कॉल करने योग्य लागू होता है। यह इस विशेष कार्य के लिए अच्छा बनाता है। आम तौर पर, सूची की समझ अधिक पठनीय और कुशल होती है (map() के साथ कुछ भी जटिल करने के लिए आपको lambda की आवश्यकता होती है), लेकिन जहां आप बस प्रकार बदलना चाहते हैं, map() बहुत स्पष्ट और त्वरित हो सकता है।

ध्यान दें कि मैं 2.x का उपयोग कर रहा हूं, इसलिए हमें एक सूची मिलती है। यदि आप 3.x में एक सूची चाहते हैं, तो 3.x में आपको एक पुनरावृत्त (जो आलसी है) मिलेगा, बस list(map(...)) करें। यदि आप अपने उपयोग के लिए एक पुनरावर्तनीय के साथ ठीक हैं, itertools.imap() 2.x में आलसी map() प्रदान करता है।

+0

पीई 2 'मानचित्र' w/o में Lambdaas सूची-comps से तेज़ हैं। :) –

+1

@ भार्गवराव शायद नगण्य राशि से - जब तक कि आपने इसे अपने कोड में प्रदर्शन बाधा के रूप में पहचाना नहीं है, पठनीयता हमेशा प्राथमिकता होनी चाहिए। –

+0

मैंने हमेशा सोचा कि 'मानचित्र' सूची-कंप की तुलना में अधिक पठनीय था। लेकिन हाँ, गति diff काफी छोटा है। –

संबंधित मुद्दे