42
बनाने के लिए सूची समझ का उपयोग करें मैं सूची से 2-टुपल का टुपल बनाने के लिए सूची समझ का उपयोग कैसे कर सकता हूं। यहएक tuple
tup =()
for element in alist:
tup = tup + ((element.foo, element.bar),)
बनाने के लिए सूची समझ का उपयोग करें मैं सूची से 2-टुपल का टुपल बनाने के लिए सूची समझ का उपयोग कैसे कर सकता हूं। यहएक tuple
tup =()
for element in alist:
tup = tup + ((element.foo, element.bar),)
tup = tuple((element.foo, element.bar) for element in alist)
तकनीकी तौर पर के बराबर होगा, यह एक generator expression है। यह एक सूची समझ की तरह है, लेकिन यह आलसी मूल्यांकन किया गया है और एक मध्यवर्ती सूची के लिए स्मृति आवंटित करने की आवश्यकता नहीं होगी।
पूर्णता के लिए, सूची समझ इस प्रकार दिखाई देगा:
tup = tuple([(element.foo, element.bar) for element in alist])
पुनश्च: attrgetter
तेजी से नहीं है (alist
एक लाख आइटम यहाँ है):
In [37]: %timeit tuple([(element.foo, element.bar) for element in alist])
1 loops, best of 3: 165 ms per loop
In [38]: %timeit tuple((element.foo, element.bar) for element in alist)
10 loops, best of 3: 155 ms per loop
In [39]: %timeit tuple(map(operator.attrgetter('foo','bar'), alist))
1 loops, best of 3: 283 ms per loop
In [40]: getter = operator.attrgetter('foo','bar')
In [41]: %timeit tuple(map(getter, alist))
1 loops, best of 3: 284 ms per loop
In [46]: %timeit tuple(imap(getter, alist))
1 loops, best of 3: 264 ms per loop
(+ 1) तकनीकी रूप से यह इंगित करने लायक हो सकता है कि यह एक सूची समझ नहीं है (लेकिन मुझे यकीन है कि ओपी दिमाग में नहीं होगा :)) – NPE
आप coul डी भी 'tuple (नक्शा (ऑपरेटर .attrgetter (' foo ',' बार '), alist करते हैं)) '। मैं संभवत: आपके द्वारा पठनीयता के लिए पोस्ट किए गए एक का उपयोग करता हूं, लेकिन 'attrgetter' का थोड़ा सा प्रदर्शन लाभ हो सकता है। आपको 'टाइमिट' करना होगा और देखें कि यह वास्तविक तंग लूप में है या नहीं। – mgilson
इस उदाहरण में सूची समझ और जेनरेटर अभिव्यक्ति के बीच क्या अंतर है क्योंकि tuple() को उस पर बुलाया जाता है? क्या फॉर्म के बावजूद यह एक ही स्मृति पदचिह्न का उपभोग नहीं करेगा? – Octipi