我是python的新手,目前正在学习基础知识。
我想删除列表中的重复项。
下面是我的代码:
numbers = [2, 4, 5, 6, 9, 4, 0, 8, 2, 4]
for item in reversed(numbers):
if numbers.count(item) > 1:
numbers.remove(item)
print(numbers)我所期望的结果是
[2, 4, 5, 6, 9, 0, 8]然而,我得到的却是
[5, 6, 9, 0, 8, 2, 4]我不知道为什么会发生这种情况,因为我使用了反向迭代器。因此,任何解释都是值得感谢的。
发布于 2021-11-02 04:34:32
您可以使用此方法
numbers = [2, 4, 5, 6, 9, 4, 0, 8, 2, 4]
finale = list(dict.fromkeys(numbers))输出:
[2, 4, 5, 6, 9, 0, 8]作为字典不能包含重复的键,该函数从我们的列表中删除任何重复的值。然后我们可以将我们的字典转换回一个列表。
发布于 2021-11-02 05:37:06
正如7koFnMiP所指出的,remove()方法删除具有指定值的第一个元素。
解决这个问题的一种方法是使用pop()而不是remove(),以便能够引用要从列表中删除的对象的索引。
下面是一个示例,使用向后引用索引的迭代器开始从列表的末尾删除:
numbers = [2, 4, 5, 6, 9, 4, 0, 8, 2, 4]
for item in reversed(numbers):
if numbers.count(item) > 1:
# where the difference is:
numbers.pop(next(i for i in reversed((range(len(numbers)))) if numbers[i] == item))
print(numbers)输出结果与预期一致:
[2, 4, 5, 6, 9, 0, 8]https://stackoverflow.com/questions/69805334
复制相似问题