2016-02-25 4 views
5

के भीतर सूची में तत्वों को कैसे संशोधित करें मैं मूल बातें सीखने की कोशिश कर पाइथन के लिए बहुत नया हूं। सूची के बारे में कोई संदेह है।सूची

L = [[1,2,3],[4,5,6],[3,4,6]] 

उत्पादन किया जाना चाहिए::

[[2,4,6],[8,10,12],[6,8,12]] 

कोड पीछा कर रहा है

for x in range(len(L)): 
    for y in range(len(L[x])): 
     L[x][y] = L[x][y] + L[x][y] 
print L 

यह उत्पादन [[2,4,6],[8,10,12],[6,8,12]] देता है कि मेरे लिए काम करता

एक सूची है।

for x in L: 
    a = L.index(x) 
    for y in L[a]: 
     b = L[a].index(y) 
     L[a][b] = L[a][b] + L[a][b] 
print L 

ऊपर कोड उत्पादन प्राप्त है के साथ:

[[4,2,6],[8,10,12],[12,8,6]] 

मैं ऊपर उत्पादन के बारे में डिबग करने की कोशिश की

अब मैं एक अलग कोड के साथ एक ही उत्पादन करना चाहते हैं। मैंने प्रिंटिंग ए और बी के लिए "L[a][b] = L[a][b] + L[a][b]" लाइन के ऊपर एक प्रिंट स्टेटमेंट रखा है। मैं ए और बी के मूल्यों देख कर हैरान था कर रहे हैं:

0,0 
0,0 
0,2 
1,0 
1,1 
1,2 
2,0 
2,1 
2,0 

फिर अगर मैं तो लाइन "L[a][b] = L[a][b] + L[a][b]" बाहर टिप्पणी ए और बी के मूल्यों के रूप में उम्मीद कर रहे हैं:

0,0 
0,1 
0,2 
1,0 
1,1 
1,2 
2,0 
2,1 
2,2 

मैं इस शक्ति पर शक पाइथन में चर के दायरे के कारण हो रहा है और अजगर में स्कोपिंग के बारे में कुछ सामानों का अध्ययन करने की कोशिश की। लेकिन मुझे स्कोपिंग या उपर्युक्त प्रश्न के लिए उचित उत्तर नहीं मिला।

+1

जवाब है, भीतरी 'for' पाश की दूसरी पाश में काफी स्पष्ट है एक बार अपने आप को संशोधित' एल [0] [0] 'से' 2' और फिर '2' के सूचकांक की खोज करें, लेकिन आपका कोड अनावश्यक रूप से जटिल लगता है, जो मुझसे पूछता है पूछो .. क्या आप अपने मूल कोड से कुछ आसान हासिल करने की कोशिश कर रहे हैं? – Obsidian

उत्तर

0

जैसा कि अन्य लोगों ने समझाया है, जब आप index फ़ंक्शन का उपयोग करते हैं, तो यह उस मूल्य की पहली घटना पाता है जिसे आप खोज रहे हैं। तो के माध्यम से आप कर रहे हैं पाश पहली बार (पहली पंक्ति के लिए), यह एक आसान, अधिक नियतात्मक तरह से सूचकांक हो रही के लिए की तरह

b = 1 
[1,2,3].find(1) # returns index 0 
#Then you modify the first element of the list 
b = 2 
[2,2,3].find(2) #returns index 0 again! 

लग रहा है, आप एक सूची पर enumerate फ़ंक्शन का उपयोग कर सकते हैं। यह आपको एक पुनरावर्तक प्रदान करेगा जो सूचकांक और मान देता है जब आप एक सूची में जाते हैं।

for rowInd, x in enumerate(L): 
    for colInd, y in enumerate(x): 
     L[rowInd][colInd] = y + y 

ध्यान दें कि यह आपके मूल समाधान के रूप में ऐसा करेगा।

एल = [[2, 4, 6], [8, 10, 12], [6, 8, 12]]

+0

इसे हल करने के तरीके के लिए धन्यवाद। –

+0

निश्चित रूप से। जब आपको मौका मिलता है तो उत्तर का चयन करना सुनिश्चित करें। –

0

अपने वांछित आउटपुट को हासिल करने का सबसे अच्छा तरीका list comprehension का उपयोग करना है। इस प्रकार वांछित परिणाम प्राप्त करने

L = [[1,2,3], [4,5,6], [3,4,6]] 
answer = [[2*el for el in sublist] for sublist in L] 
print(answer) 

आउटपुट

[[2, 4, 6], [8, 10, 12], [6, 8, 12]] 

अपनी सूची L में प्रत्येक sublist से अधिक यह दोहराता है और पलता sublist में प्रत्येक el 2 से,: आप इस प्रकार कर सकता है।

+1

उनके पास एक कामकाजी समाधान है। सवाल यह था कि दूसरा समाधान * काम * क्यों नहीं किया। – zondo

+1

भी, ध्यान दें कि इससे सूची की एक प्रति बन जाती है और ओप का मूल प्रयास इसे जगह में करना था। –

1

आप अपनी सूची को कथन के साथ संशोधित करते हैं - L[a][b] = L[a][b] + L[a][b] उदा। -

L = [[1, 2, 3], [4, 5, 6], [3, 4, 6]] 

L[0][0] = 1 शुरू में तो फिर तुम यह एल के रूप में संशोधित [0] [0] = 2

L = [[2, 2, 3], [4, 5, 6], [3, 4, 6]] 

अगले पाश में आप 2 के लिए सूचकांक, अब जो 0,0 है खोज, क्योंकि आप संशोधित सूची एल मैंने एल को आपके उदाहरण में बी के साथ प्रिंट करने की कोशिश की।परिणाम व्यवहार बताते हैं -

0 0 
[[1, 2, 3], [4, 5, 6], [3, 4, 6]] 
0 0 
[[2, 2, 3], [4, 5, 6], [3, 4, 6]] 
0 2 
[[4, 2, 3], [4, 5, 6], [3, 4, 6]] 
1 0 
[[4, 2, 6], [4, 5, 6], [3, 4, 6]] 
1 1 
[[4, 2, 6], [8, 5, 6], [3, 4, 6]] 
1 2 
[[4, 2, 6], [8, 10, 6], [3, 4, 6]] 
2 0 
[[4, 2, 6], [8, 10, 12], [3, 4, 6]] 
2 1 
[[4, 2, 6], [8, 10, 12], [6, 4, 6]] 
2 0 
[[4, 2, 6], [8, 10, 12], [6, 8, 6]] 
+0

व्याख्या के लिए धन्यवाद –

0

मुझे लगता है कि कोड का निम्न भाग एल में एक्स के लिए बेहतर हो सकता है: एक्स में y के लिए मूल सूची से अधिक #iterating: भीतरी सूची से अधिक #iterating [x] [वाई] = [एक्स] [वाई] + [एक्स] [वाई]

0

आप अपने दूसरे विधि का उपयोग पर जोर देते हैं, तो आप स्टोर करने के लिए की जरूरत है एक अस्थायी चर में परिणाम:

L = [[1, 2, 3], [4, 5, 6], [3, 4, 6]] 
M = [[0 for y in range(3)] for x in range(3)] 
for x in L: 
    a = L.index(x) 
    for y in L[a]: 
     b = L[a].index(y) 
     M[a][b] = L[a][b] + L[a][b] 
L = M 
print L 

आउटपुट:

[[2, 4, 6], [8, 10, 12], [6, 8, 12]]