[问题] for循环的串行表示

楼主: yrabes (亚贝丝)   2022-02-24 11:34:59
最近在练习使用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的每个元素都会跑过一遍才是
感谢回答~
作者: robert09080 (Aspettarei)   2022-02-24 11:57:00
这不是一个很好的写法,因为你使用t2做循环,又删除t2中的元素请用 list comprehensive,[x for x in t2 if x not in t1]或是可以使用set,set(t2)-set(t1)
楼主: yrabes (亚贝丝)   2022-02-24 12:08:00
喔喔 我懂您的意思了!!感谢您~
作者: LeFilsDuVent (Le Fils Du Vent)   2022-02-24 15:30:00
至于为什么会得到那个结果,test2[:]会是test2的一shallow copy,所以你的loop的确会跑遍x=1,2,...,9但如果用for x in test2:那会跑的是x=1,3,5,7,9原因就如同楼上解释的,你在loop through test2同时又修改test2
楼主: yrabes (亚贝丝)   2022-02-24 15:55:00
感谢,这样说我更清楚了!!

Links booklink

Contact Us: admin [ a t ] ucptt.com