亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

請問python中為什么我用for循環對嵌套列表進行賦值時,都是以i的最終值來計算的?

瀏覽:121日期:2022-06-29 11:03:17

問題描述

有兩個例子,第一個如下,

a=[0]*5for i in range(5): a[0]=i+3

此時,a=[3,4,5,6,7]第二個如下:

a=[[0,0]]*5for i in range(5): a[0]=i+3

這個時候,a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

為什么會出現這種情況呢,我的第二種寫法有什么不對嗎?新手求大神指教!

問題解答

回答1:

你這里犯了2個問題: 第一個, 也就是樓上說得, 你一直是修改a[0]的值, 你并沒有將變化的i放入列表去處理, 或者說, 你漏了把i寫進題目中的代碼: 正確方法:

a = [0] * 5for i in range(5): a[i] = i + 3print a

第二個問題, 也就是你上面問得, 為什么a=[[0,0]]*5這種定義方法, 結果出來發現全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]這個問題和第一個問題有個相同之處, 就是你應該是忘了寫a[i][0] = i + 3,其次就是: 如果用[[0, 0]] * 5這樣的方式生成的列表, 里面的全部都這是引用, 都是同一個對象, 并不是5個對象! 看例子:

a = [[0, 0]] * 5print aprint id(a[0])print id(a[1])print id(a[2])# 輸出[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]424556884245568842455688

可以通過id值看到, 他們都是一樣的地址, 所以列表中的5個對象, 全是同一個, 所以當你執行a[i][0]= i+3時, 不管你修改第幾個元素, 最終都只是修改同一個列表而已!所以如果想試下你想要的效果, 你就不能用那種方式快速生成列表,只能用下面的方法:

a = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], ]for i in range(5): a[i][0] = i + 3print a# 輸出[[3, 0], [4, 0], [5, 0], [6, 0], [7, 0]]回答2:

因為你要用i 變量進行迭代,你總是改變0的話,a[0] 當然被覆蓋了,為最后一次的值第一次代碼,也得不出a=[3,4,5,6,7],你得用i變量

In [156]: a=[0]*5 ...: for i in range(5): ...: a[0]=i+3 ...:In [157]: aOut[157]: [7, 0, 0, 0, 0]In [159]: a=[0]*5 ...: for i in range(5): ...: a[i]=i+3 ...: ...:In [160]:In [160]: aOut[160]: [3, 4, 5, 6, 7]

第二次代碼:

In [163]: a=[[0,0]]*5 ...: for i in range(5): ...: a[0]=i+3 ...:In [164]: aOut[164]: [7, [0, 0], [0, 0], [0, 0], [0, 0]]In [165]: a=[[0,0]]*5 ...: for i in range(5): ...: a[i]=i+3 ...: ...:In [166]: aOut[166]: [3, 4, 5, 6, 7]

好像是你代碼寫錯了,我猜你想問這個問題

In [168]: a=[[0,0]]*5 ...: for i in range(5): ...: a[i][0]=i+3 ...: ...: ...:In [169]: aOut[169]: [[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

你可以把a打印出來

In [175]: a=[[0,0]]*5 ...: for i in range(5): ...: a[i][0]=i+3 ...: print(a,id(a[i])) ...:[[3, 0], [3, 0], [3, 0], [3, 0], [3, 0]] 93411808[[4, 0], [4, 0], [4, 0], [4, 0], [4, 0]] 93411808[[5, 0], [5, 0], [5, 0], [5, 0], [5, 0]] 93411808[[6, 0], [6, 0], [6, 0], [6, 0], [6, 0]] 93411808[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]] 93411808

@Lin_R 說的是正確的

回答3:

實際上就是第2種方式是共享的,而不是單獨形式了。因為此時是列表,是可變的,而第1種方式是數字,是不可變的。

標簽: Python 編程
主站蜘蛛池模板: 国产成人aa在线观看视频 | 亚洲欧洲国产综合 | 伊人精品视频 | 亚洲欧洲精品视频在线观看 | 精品国产免费观看久久久 | 国产高清晰在线播放 | 国产精品久久久久久久久久久威 | 给个网站可以在线观看你懂的 | 国产一区二区三区美女在线观看 | 色一伦一情一区二区三区 | 1024免费观看| 国产尤物在线观看 | 欧美黄区 | 久久精品亚洲精品国产色婷 | 国产乱码一区二区三区四川人 | 中国一级特黄真人毛片免 | 欧美日韩一区二区三区久久 | 中国黄色毛片视频 | 国产精品视频一区二区噜噜 | 国产精品原创巨作av | 在线播放国产一区 | 久久99精品久久久久子伦小说 | 1769国内精品视频在线观看 | 久久www免费人成看片色多多 | 香蕉免费一区二区三区在线观看 | 国产美女91视频 | 午夜hhh视频在线观看hhhh | 成人在线短视频 | 欧美日韩一区二区三区免费 | 亚洲精品久久一区二区无卡 | 亚洲国产精品婷婷久久 | 日韩亚洲精品不卡在线 | 和日本免费不卡在线v | 黄色毛片免费在线观看 | 国产成人久久精品激情91 | 精品欧美成人bd高清在线观看 | 成人国产免费 | 免费播放欧美一级特黄 | 一级黄色片大全 | 爱爱插入视频 | 亚洲欧美日韩中文字幕在线 |