list列表中去除重复元素时不小心踩的坑

今天闲来没事就上网搜了下python面试题,其中有一题是去除list列表中重复的元素,至少两种方法,我看了下后到,这还不简单,立马就操起编辑器就开干,用了多种方法后,就用到下面这种,一开始我还觉得应该可以,但结果一运行就傻眼了,发现得出来的列表居然为空。

list列表中去除重复元素时不小心踩的坑

》》》[ ]

看到结果,瞬间就懵逼了,因为前面没用过这个low的方法,但为了凑多种方法,也只好这样写了,我敲代码的思路是这样的:

我在25行中用变量i分别去取lst列表中的元素,第一次for循环后i的值为1,因为i有两个,所以会大于1,然后在27行中删掉,当i取到第二个的时候就会执行else,这时候我定义的空列表就有用了,将这些没有相同元素的唯一元素加入到lst2列表中去,想法是很好的,但结果却不尽人意,然后我就将此代码调试一下,结果发现运行到最后根本就没进过else里面去,而且i值分别为1,2,3,4,5,6,然后我就纳闷了,lst列表中有两个1啊,就算删掉一个后也还有一个啊,为什么只去到一个呢,思索片刻后我就发现问题了,因为我是直接对lst列表进行删除的,lst.remove()后有回到for i in lst 了,这时候的lst已经改变了,变成[1,2,2,3,3,4,4,5,5,6,6]了,但我也想不通,就算刷新了不是应该再从第一个元素取吗?随后我就想通了,因为这还是原来的那个列表,循环一次后i下一次循环则会取到索引会随之递增,这时候i取到的索引就该是为1的元素,而这时候我们的列表已经改变了,索引唯1的值是2了,所以这时候的i的值为2了,终于搞明白了,如果还想用这种方法的话就不要直接对lst进行remove,而是给它深拷贝给另一个新列表,在新列表中进行remove即可。