नेस्टेड सूची इंडेक्स [python]


Answers

असल में आपकी सूची में सभी वस्तुएँ समान हैं, इसलिए एक परिवर्तन दूसरों को भी बदलते हैं:

In [151]: some_list = 4 * [(4 * [0])]  

In [152]: [id(x) for x in some_list]
Out[152]: [148641452, 148641452, 148641452, 148641452]

In [160]: some_list[0][1]=5  #you think you changed the list at index 0 here

In [161]: some_list
Out[161]: [[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]  #but all lists are changed

अपनी सूची इस तरह बनाएँ:

In [156]: some_list=[[0]*4 for _ in range(4)]

In [157]: some_list
Out[157]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

In [158]: [id(x) for x in some_list]
Out[158]: [148255436, 148695180, 148258380, 148255852]

In [163]: some_list[0][1]=5

In [164]: some_list
Out[164]: [[0, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]  #works fine in this case
Question

इस सवाल का पहले से ही उत्तर दिया गया है:

मुझे नीली सूची में पायथन में दिखाए गए कोड में पायथन में कुछ समस्या का अनुभव हुआ है

असल में, मेरे पास 2 डी सूची में सभी 0 मान शामिल हैं, मैं सूची में मूल्य को लूप में अपडेट करना चाहता हूं।

हालांकि, पायथन मुझे इच्छित परिणाम का उत्पादन नहीं करता है क्या ऐसा कुछ है जो मैं range() और पायथन सूची इंडेक्स के बारे में गलत समझता हूं?

some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i+1][j+1] = 1
for i in range(4):
    print(some_list[i])

मुझे उम्मीद है कि परिणाम हैं:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

लेकिन पायथन से वास्तविक परिणाम हैं:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

यहाँ क्या चल रहा है?