本帖最后由 isdkz 于 2023-6-1 01:43 编辑
在 Python 中,不建议在遍历列表的同时对其进行修改(如删除操作)。因为这可能会影响遍历的过程,可能导致遍历的索引与实际的元素不匹配,从而出现一些奇怪的行为,就像你看到的 "3" 没有被删除的情况。
原因是:当你删除一个元素时,列表中所有后面的元素的索引都会相应地减少 1。然而,循环的下一次迭代仍然会增加索引,结果就是可能会跳过一个元素。在你的例子中,如果有两个相同的元素连续出现,你可能会删除第一个,但跳过第二个,因为第二个元素在删除第一个元素后移动到了第一个元素的位置。
要解决这个问题,一种更好的方法是使用集合(set)来去重,因为集合中的元素都是唯一的。不过需要注意的是,这种方法会丢失原列表的顺序,如果你需要保持元素的顺序,可以使用有序集合(OrderedDict)或者列表推导式。
下面是一个使用 set 来去重的例子:
- def remove_duplicates_from_list(lista):
- return list(set(lista))
- x = input()
- x_lst = x.split(',')
- lista = [int(x_lst[i]) for i in range(len(x_lst))]
- print(remove_duplicates_from_list(lista))
复制代码
如果需要保持顺序,可以使用列表推导式:
- def remove_duplicates_from_list(lista):
- return [lista[i] for i in range(len(lista)) if lista[i] not in lista[:i]]
- x = input()
- x_lst = x.split(',')
- lista = [int(x_lst[i]) for i in range(len(x_lst))]
- print(remove_duplicates_from_list(lista))
复制代码
以上两种方法都能有效地去重,并且不会出现在遍历时修改列表的问题。