2012-11-14 21 views
8

मैं इस प्रकार की सूची के अंदर एक टपल/सूची है:पायथन में एक सूची के अंदर एक tuple/सूची में मूल्य स्वैप करें?

[('foo','bar'),('foo1','bar1'),('foofoo','barbar')] 

क्या अजगर (एक बहुत कम CPU/राम मशीन पर चल) इस तरह मूल्यों स्वैप करने के लिए में सबसे तेज़ तरीका है ...

[('bar','foo'),('bar1','foo1'),('barbar','foofoo')] 

curently का उपयोग कर:

for x in mylist: 
    self.maynewlist.append((_(x[1]),(x[0]))) 

वहाँ एक बेहतर या तेज तरीका है ???

उत्तर

7

आप मानचित्र इस्तेमाल कर सकते हैं:

map (lambda t: (t[1], t[0]), mylist) 

या सूची समझ:

[(t[1], t[0]) for t in mylist] 

सूची comprehensions पसंद किया जाता है और माना जाता है कि बहुत तेजी से नक्शा जब लैम्ब्डा की जरूरत है की तुलना में, फिर भी ध्यान दें कि सूची समझ एक सख्त है मूल्यांकन, यह मूल्यांकन किया जाएगा जैसे ही यह परिवर्तनीय हो जाता है, यदि आप स्मृति खपत के बारे में चिंतित हैं तो जनरेटर इसके बजाय:

g = ((t[1], t[0]) for t in mylist) 
#call when you need a value 
g.next() 

वहाँ कुछ और जानकारी यहां हैं: Python List Comprehension Vs. Map

+0

बात यह है कि मुझे एक इनिग्मा 2 जीयूआई घटक के लिए उलटा सूची की आवश्यकता है, जिसका अर्थ है कि मुझे एक पूरी सूची (उस सूची में 1000 से अधिक tuples) उलटा होना चाहिए। सूची समझ सही तरीका है तो? – subixonfire

+0

@ user1824571 सबसे अधिक संभावना है – iabdalkader

5

आप इस तरह reversed उपयोग कर सकते हैं:

tuple(reversed((1, 2)) == (2, 1) 

एक सूची में इसे लागू करने के लिए आपको map या एक सूची समझ का उपयोग कर सकते हैं:

map(tuple, map(reversed, tuples))  # map 
[tuple(reversed(x)) for x in tuples] # list comprehension 

यदि आप मुख्य रूप से रनटाइम गति में रुचि रखते हैं, तो मैं केवल पुनः संयोजित कर सकता हूं और आप विभिन्न दृष्टिकोणों को प्रोफाइल करते हैं और सबसे तेज़ चुनते हैं।