作者yrabes (亚贝丝)
看板Python
标题[问题] for回圈的串列表示
时间Thu Feb 24 11:34:59 2022
最近在练习使用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://webptt.com/cn.aspx?n=bbs/Python/M.1645673701.A.819.html
1F:推 robert09080: 这不是一个很好的写法,因为你使用t2做回圈,又删除 02/24 11:57
2F:→ robert09080: t2中的元素 02/24 11:57
3F:→ robert09080: 请用 list comprehensive,[x for x in t2 if x no 02/24 11:58
4F:→ robert09080: t in t1] 02/24 11:58
5F:→ robert09080: 或是可以使用set,set(t2)-set(t1) 02/24 12:00
6F:→ yrabes: 喔喔 我懂您的意思了!!感谢您~ 02/24 12:08
7F:推 LeFilsDuVent: 至於为什麽会得到那个结果,test2[:]会是test2的一 02/24 15:30
8F:→ LeFilsDuVent: shallow copy,所以你的loop的确会跑遍x=1,2,...,9 02/24 15:31
9F:→ LeFilsDuVent: 但如果用for x in test2:那会跑的是x=1,3,5,7,9原因 02/24 15:32
10F:→ LeFilsDuVent: 就如同楼上解释的,你在loop through test2同时又修 02/24 15:32
11F:→ LeFilsDuVent: 改test2 02/24 15:32
12F:→ yrabes: 感谢,这样说我更清楚了!! 02/24 15:55