亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

簡單循環中意外的列表丟失

簡單循環中意外的列表丟失

紅顏莎娜 2023-12-12 15:23:29
以下 for 循環將按ids預期打印列表中的每個元素:ids = [0,1,2,3,4,5,6,7,8,9]for item in ids:    print(item)0123456789然而,當我構造一個應生成兩個隨機數的 for 循環時,該循環僅經歷 5 個周期(對于偶數)。在這里,我將diffids設置為等于刪除當前項目編號的 集合。diff應該是一組 9 個數字(因此,對于第一個循環diff將是[1,2,3,4,5,6,7,8,9],在第二個循環diff中將是 [0,2,3,4,5,6,7,8,9] 等...但是會發生什么列表中的奇數ids被完全跳過。當我ids在 for 循環中根本沒有修改列表時,為什么會發生這種情況?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貢獻1826條經驗 獲得超6個贊

我想你想要

diff = ids.copy()

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


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

TA貢獻1872條經驗 獲得超4個贊

這是因為對象在 python 內存中的管理方式。雖然您可能定義了兩個不同的變量,但實際上并不是兩個不同的對象。這兩個名稱diff指ids的是 Python 內存中的同一個對象。因此,當您修改一個列表時,您也會修改另一個列表,從而在每次迭代發生時改變 for 循環的過程。我對你的循環做了一些修改,這樣你就明白我的意思了:


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

因此,無論我們如何命名它,修改 diff 或 ids,總是會修改該對象,因此當您調用它(使用 diff 或 ids)時,您將收到相同的修改后的對象。


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


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

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


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

TA貢獻1817條經驗 獲得超6個贊

您正在ids循環內進行修改,diff = ids不會創建對象,只是分配diff同一個對象。所以ids當你修改時你就修改diff。要解決此問題,請執行以下操作:

diff = ids.copy()


查看完整回答
反對 回復 2023-12-12
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號