第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

簡單循環(huán)中意外的列表丟失

簡單循環(huán)中意外的列表丟失

紅顏莎娜 2023-12-12 15:23:29
以下 for 循環(huán)將按ids預(yù)期打印列表中的每個元素:ids = [0,1,2,3,4,5,6,7,8,9]for item in ids:    print(item)0123456789然而,當(dāng)我構(gòu)造一個應(yīng)生成兩個隨機(jī)數(shù)的 for 循環(huán)時,該循環(huán)僅經(jīng)歷 5 個周期(對于偶數(shù))。在這里,我將diffids設(shè)置為等于刪除當(dāng)前項(xiàng)目編號的 集合。diff應(yīng)該是一組 9 個數(shù)字(因此,對于第一個循環(huán)diff將是[1,2,3,4,5,6,7,8,9],在第二個循環(huán)diff中將是 [0,2,3,4,5,6,7,8,9] 等...但是會發(fā)生什么列表中的奇數(shù)ids被完全跳過。當(dāng)我ids在 for 循環(huán)中根本沒有修改列表時,為什么會發(fā)生這種情況?ids列表是如何修改的?ids = [0,1,2,3,4,5,6,7,8,9]for item in ids:    print(item)    diff = ids    diff.remove(item)    test = random.sample(diff, 2)    print(test)0[8, 2]2[8, 5]4[1, 6]6[9, 8]8[7, 3]
查看完整描述

3 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個贊

我想你想要

diff = ids.copy()

您所擁有的意思diff只是指向ids,因此當(dāng)您從 中刪除元素時diff,您也會從 中刪除元素ids。


查看完整回答
反對 回復(fù) 2023-12-12
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個贊

這是因?yàn)閷ο笤?python 內(nèi)存中的管理方式。雖然您可能定義了兩個不同的變量,但實(shí)際上并不是兩個不同的對象。這兩個名稱diff指ids的是 Python 內(nèi)存中的同一個對象。因此,當(dāng)您修改一個列表時,您也會修改另一個列表,從而在每次迭代發(fā)生時改變 for 循環(huán)的過程。我對你的循環(huán)做了一些修改,這樣你就明白我的意思了:


ids = [0,1,2,3,4,5,6,7,8,9]

print(id(ids))

for item in ids:

    print(item)

    diff = ids

    print(id(diff))

    diff.remove(item)

    test = random.sample(diff, 2)

    print(test)

我得到前兩次迭代的以下輸出:


140088760329608 ##This is the id for ids in Python's memory

0

140088760329608 ##This is the id for the diff in Python's memory

因此,無論我們?nèi)绾蚊?,修?diff 或 ids,總是會修改該對象,因此當(dāng)您調(diào)用它(使用 diff 或 ids)時,您將收到相同的修改后的對象。


正如 Collin 建議的那樣,您可以使用以下方法.copy()來防止這種情況發(fā)生:


ids = [0,1,2,3,4,5,6,7,8,9]

print(id(ids))

for item in ids:

    print(item)

    diff = ids.copy()

    print(id(diff))

    diff.remove(item)

    test = random.sample(diff, 2)

    print(test)

返回:


140088759855944 ##Object id for ids

0

140088759071496 ##Object id for diffs

創(chuàng)建一個新對象,您可以安全地修改而無需更改另一個對象。


查看完整回答
反對 回復(fù) 2023-12-12
?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個贊

您正在ids循環(huán)內(nèi)進(jìn)行修改,diff = ids不會創(chuàng)建對象,只是分配diff同一個對象。所以ids當(dāng)你修改時你就修改diff。要解決此問題,請執(zhí)行以下操作:

diff = ids.copy()


查看完整回答
反對 回復(fù) 2023-12-12
  • 3 回答
  • 0 關(guān)注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號