2010-01-30 7 views
7

मैं एक पाइथन नौसिखिया हूं और उन चीजों में से एक जो मैं करने की कोशिश कर रहा हूं वह सूची की समझ के आसपास मेरे सिर को लपेटता है। मैं देख सकता हूं कि यह एक बहुत शक्तिशाली विशेषता है जो सीखने लायक है।पाइथन में सूची समझ का उपयोग ज़िप() के समान कुछ करने के लिए?

cities = ['Chicago', 'Detroit', 'Atlanta'] 
airports = ['ORD', 'DTW', 'ATL'] 

print zip(cities,airports) 
[('Chicago', 'ORD'), ('Detroit', 'DTW'), ('Atlanta', 'ATL')] 

मैं सूची समझ कैसे उपयोग करती हैं इसलिए मैं एक सूची के भीतर tuples की एक श्रृंखला एक सूची के भीतर सूचियों की एक श्रृंखला है, बजाय के रूप में परिणाम प्राप्त कर सकते हैं?

[['Chicago', 'ORD'], ['Detroit', 'DTW'], ['Atlanta', 'ATL']] 

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

उत्तर

26

कुछ इस तरह:

[[c, a] for c, a in zip(cities, airports)] 

वैकल्पिक रूप से, list निर्माता सूची में tuples परिवर्तित कर सकते हैं:

[list(x) for x in zip(cities, airports)] 

या, map समारोह इस मामले में थोड़ा कम वर्बोज़ है:

map(list, zip(cities, airports)) 
1

यह zip लेता है , zip, map, या itertools से कुछ मदद के बिना,

$ python -m timeit -c '[ [a, b] for a, b in zip(xrange(100), xrange(100)) ]' 
10000 loops, best of 3: 68.3 usec per loop 

$ python -m timeit -c 'map(list, zip(xrange(100), xrange(100)))' 
10000 loops, best of 3: 75.4 usec per loop 

$ python -m timeit -c '[ list(x) for x in zip(range(100), range(100)) ]' 
10000 loops, best of 3: 99.9 usec per loop 
+0

-1: ओपी विशेष रूप से एक सूची समझ के लिए कहा। –

4

एक सूची समझ एक संस्थान नहीं कर सकते ":

map(list, zip(cities, airports)) 

प्रत्येक के प्रदर्शन के लिए के रूप में: के उत्पादन और सूचियों के लिए सभी tuples धर्मान्तरित समांतर लूप "एकाधिक अनुक्रमों पर - एक अनुक्रम पर केवल सरल लूप, या कई लोगों पर" नेस्टेड "लूप।

+0

ऐसा किया जा सकता है क्योंकि डेव किर्बी ने – inspectorG4dget

5

आप बिल्कुल ज़िप का उपयोग किए बिना यह करना चाहता था, तो आप इस तरह कुछ करने के लिए होता है:

[ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ] 

लेकिन वहाँ एक बौद्धिक व्यायाम की तुलना में है कि अन्य करने के लिए कोई कारण नहीं है।

map(list, zip(cities, airports)) का उपयोग करना छोटा, सरल है और लगभग निश्चित रूप से तेज़ी से चल जाएगा।

+0

का प्रदर्शन किया है, दूसरी तरफ, एक सूची समझ और एक ज़िप का उपयोग करना उतना ही छोटा है, और कम से कम मेरे लिए भी सरल है। क्या आपको पता है कि यह प्रदर्शन मानचित्र के साथ तुलना कैसे करेगा? –

0

संभव enumerate उपयोग करने के लिए, साथ ही:

[[y,airports[x]] for x,y in enumerate(cities)] 
संबंधित मुद्दे