午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

請(qǐng)問(wèn)python中為什么我用for循環(huán)對(duì)嵌套列表進(jìn)行賦值時(shí),都是以i的最終值來(lái)計(jì)算的?

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

問(wèn)題描述

有兩個(gè)例子,第一個(gè)如下,

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

此時(shí),a=[3,4,5,6,7]第二個(gè)如下:

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

這個(gè)時(shí)候,a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

為什么會(huì)出現(xiàn)這種情況呢,我的第二種寫(xiě)法有什么不對(duì)嗎?新手求大神指教!

問(wèn)題解答

回答1:

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

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

第二個(gè)問(wèn)題, 也就是你上面問(wèn)得, 為什么a=[[0,0]]*5這種定義方法, 結(jié)果出來(lái)發(fā)現(xiàn)全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]這個(gè)問(wèn)題和第一個(gè)問(wèn)題有個(gè)相同之處, 就是你應(yīng)該是忘了寫(xiě)a[i][0] = i + 3,其次就是: 如果用[[0, 0]] * 5這樣的方式生成的列表, 里面的全部都這是引用, 都是同一個(gè)對(duì)象, 并不是5個(gè)對(duì)象! 看例子:

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

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

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:

因?yàn)槟阋胕 變量進(jìn)行迭代,你總是改變0的話,a[0] 當(dāng)然被覆蓋了,為最后一次的值第一次代碼,也得不出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]

好像是你代碼寫(xiě)錯(cuò)了,我猜你想問(wèn)這個(gè)問(wèn)題

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(bǔ)打印出來(lái)

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 說(shuō)的是正確的

回答3:

實(shí)際上就是第2種方式是共享的,而不是單獨(dú)形式了。因?yàn)榇藭r(shí)是列表,是可變的,而第1種方式是數(shù)字,是不可變的。

標(biāo)簽: Python 編程
主站蜘蛛池模板: 亚州视频在线 | 超碰激情在线 | 五月六月丁香 | 成人欧美一区 | 成人精品一区二区三区四区 | 午夜看片网 | av中文资源| 蜜桃av免费看 | 亚洲 自拍 另类 欧美 丝袜 | 福利视频一区 | 欧美xxxxwwww | 国产毛片高清 | 男人天堂亚洲 | 成人免费久久 | 国产成人精品亚洲 | 久久久久久免费毛片精品 | 在线观看免费黄色 | 可以在线观看的av网站 | 亚洲综合色在线 | 色噜噜av | 国产乱国产乱 | 日本高清www| 三区在线播放 | 久久精品视频18 | 新97超碰| 国产免费一区二区三区免费视频 | 国产免费视频一区二区三区 | 操综合 | 什么网站可以看毛片 | 男人天堂你懂的 | 天天拍天天干 | 国产一区二区三区视频在线播放 | 欧美成人一二三区 | 天堂中文在线观看 | 国产在线啪 | 久久久亚洲 | 日本在线观看一区二区三区 | 蜜桃成人在线视频 | 成人欧美一区二区三区黑人孕妇 | 色香蕉网 | 日韩精品亚洲一区 |