2008-09-24 8 views
171

में इंडेक्स के साथ एक सूची Iterate मैं कसम खाता हूं कि मैंने इस संदेश को देखा है (या विधि) जो इस [3, 7, 19] की तरह एक सूची लेता है और इसे टुपल्स की पुनरावर्तनीय सूची में बनाता है, जैसे: [(0,3), (1,7), (2,19)] इसके बजाय इसका उपयोग करने के लिए:पायथन

for i in range(len(name_of_list)): 
    name_of_list[i] = something 

लेकिन मुझे नाम याद नहीं है और "iterate list" googling कुछ भी नहीं मिलता है।

उत्तर

305
>>> a = [3,4,5,6] 
>>> for i, val in enumerate(a): 
...  print i, val 
... 
0 3 
1 4 
2 5 
3 6 
>>> 
94

हाँ, यह enumerate फ़ंक्शन होगा! या बात करने के लिए अधिक है, तो आप क्या करने की जरूरत:

list(enumerate([3,7,19])) 

[(0, 3), (1, 7), (2, 19)] 
+10

मैं नहीं जानता कि क्यों यह स्वीकार किए जाते हैं जवाब नहीं है। .. –

+2

कभी-कभी लोग वास्तव में एक ऐसे प्रश्न से पूछते हैं जो वे वास्तव में चाहते हैं, दूसरी बार, वे "सर्वोत्तम" साधनों के बारे में कुछ अंधाधुंध हैं। – msw

+3

और कभी-कभी लोग केवल पूरे प्रश्न के बजाय प्रश्न की पहली डेढ़ रेखा पढ़ते हैं। यदि आप दूसरी पंक्ति के अंत तक पहुंच जाते हैं तो वह कहता है कि वह 'इन आई रेंज (लेन (name_of_list)) के बजाय इसका उपयोग करना चाहता है:' यही कारण है कि मुझे जो दिखाया गया था उसके बजाए एक उदाहरण प्रदान करने के लिए मुझे एक उदाहरण प्रदान करना पड़ा पहला भाग। –

24

यहाँ एक और zip समारोह का उपयोग कर रहा है।

>>> a = [3, 7, 19] 
>>> zip(range(len(a)), a) 
[(0, 3), (1, 7), (2, 19)] 
+10

'enumerate()' थोड़ा और सुरुचिपूर्ण है, मुझे लगता है। –

+14

@ नाथन: लेकिन ज़िप() अधिक सामान्य है और सूचियों के मनमाना जोड़े के लिए काम करता है, इसलिए यह जानना अच्छा है। – ShreevatsaR

7

यहाँ यह एक समाधान उपयोग कर रहा है नक्शा समारोह:

>>> a = [3, 7, 19] 
>>> map(lambda x: (x, a[x]), range(len(a))) 
[(0, 3), (1, 7), (2, 19)] 

और एक समाधान का उपयोग कर सूची comprehensions:

>>> a = [3,7,19] 
>>> [(x, a[x]) for x in range(len(a))] 
[(0, 3), (1, 7), (2, 19)] 
1

आप एकाधिक सूचियों है, तो आप इस संयोजन enumerate कर सकते हैं और zip:

list1 = [1, 2, 3, 4, 5] 
list2 = [10, 20, 30, 40, 50] 
list3 = [100, 200, 300, 400, 500] 
for i, (l1, l2, l3) in enumerate(zip(list1, list2, list3)): 
    print(i, l1, l2, l3) 
आउटपुट:
0 1 10 100 
1 2 20 200 
2 3 30 300 
3 4 40 400 
4 5 50 500 

ध्यान दें कि i के बाद ब्रांड्स की आवश्यकता होती है। नहीं तो आप त्रुटि मिलती है: ValueError: need more than 2 values to unpack

3

अजगर enumerate समारोह में अपनी आवश्यकताओं

result = list(enumerate([1,3,7,12])) 
print result 

उत्पादन संतुष्ट हो जाएगा

[(0, 1), (1, 3), (2, 7),(3,12)]