在刷题 请问为什么 列表去重 为什么三没有被去除呢?
代码如下def remove_element_from_list(lista):
for item in lista:#遍历每个元素
count = lista.count(item)#计算元素出现次数
if count > 1:
lista.remove(item)#发现出现次数大于1则删除该元素
return lista
x = input()
x_lst = x.split(',')
lista = ) for i in range(len(x_lst))]
print(remove_element_from_list(lista))
其他元素都被成功去除了 为何唯独三留下了 答案是新建一个列表 只要新列表里没有的元素就加进来 感觉简单明了 本帖最后由 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 = ) for i in range(len(x_lst))]
print(remove_duplicates_from_list(lista))
如果需要保持顺序,可以使用列表推导式:
def remove_duplicates_from_list(lista):
return for i in range(len(lista)) if lista not in lista[:i]]
x = input()
x_lst = x.split(',')
lista = ) for i in range(len(x_lst))]
print(remove_duplicates_from_list(lista))
以上两种方法都能有效地去重,并且不会出现在遍历时修改列表的问题。 mumei2018 发表于 2023-6-1 01:41
答案是新建一个列表 只要新列表里没有的元素就加进来 感觉简单明了
set更简单 wp231957 发表于 2023-6-1 10:23
set更简单
list(set())
页:
[1]