[問題] for迴圈的串列表示

看板Python作者 (亞貝絲)時間2年前 (2022/02/24 11:35), 編輯推噓2(2010)
留言12則, 3人參與, 2年前最新討論串1/1
最近在練習使用for 迴圈 想比較兩串列並刪除重複元素 test1 = [1,2,3,5,7] test2 = [1,2,3,4,5,6,7,8,9] for x in test2: if x in test1: test2.remove(x) print("已刪除",x) print(test2) 有問題的是黃色字的部分 如果是test2 會輸出 [2,4,6,8,9] 但如果改成 test2[:] 則會輸出[4,6,8,9] 少了2(也是我期望的) 請問為什麼會有不同 應該不管加不加[:] test2的每個元素都會跑過一遍才是 感謝回答~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.72.172 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1645673701.A.819.html

02/24 11:57, 2年前 , 1F
這不是一個很好的寫法,因為你使用t2做迴圈,又刪除
02/24 11:57, 1F

02/24 11:57, 2年前 , 2F
t2中的元素
02/24 11:57, 2F

02/24 11:58, 2年前 , 3F
請用 list comprehensive,[x for x in t2 if x no
02/24 11:58, 3F

02/24 11:58, 2年前 , 4F
t in t1]
02/24 11:58, 4F

02/24 12:00, 2年前 , 5F
或是可以使用set,set(t2)-set(t1)
02/24 12:00, 5F

02/24 12:08, 2年前 , 6F
喔喔 我懂您的意思了!!感謝您~
02/24 12:08, 6F

02/24 15:30, 2年前 , 7F
至於為什麼會得到那個結果,test2[:]會是test2的一
02/24 15:30, 7F

02/24 15:31, 2年前 , 8F
shallow copy,所以你的loop的確會跑遍x=1,2,...,9
02/24 15:31, 8F

02/24 15:32, 2年前 , 9F
但如果用for x in test2:那會跑的是x=1,3,5,7,9原因
02/24 15:32, 9F

02/24 15:32, 2年前 , 10F
就如同樓上解釋的,你在loop through test2同時又修
02/24 15:32, 10F

02/24 15:32, 2年前 , 11F
改test2
02/24 15:32, 11F

02/24 15:55, 2年前 , 12F
感謝,這樣說我更清楚了!!
02/24 15:55, 12F
文章代碼(AID): #1Y5lpbWP (Python)