首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python使用反向迭代器删除列表中的项

Python使用反向迭代器删除列表中的项
EN

Stack Overflow用户
提问于 2021-11-02 04:14:41
回答 2查看 67关注 0票数 0

我是python的新手,目前正在学习基础知识。

我想删除列表中的重复项。

下面是我的代码:

代码语言:javascript
复制
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)

我所期望的结果是

代码语言:javascript
复制
[2, 4, 5, 6, 9, 0, 8]

然而,我得到的却是

代码语言:javascript
复制
[5, 6, 9, 0, 8, 2, 4]

我不知道为什么会发生这种情况,因为我使用了反向迭代器。因此,任何解释都是值得感谢的。

EN

回答 2

Stack Overflow用户

发布于 2021-11-02 04:34:32

您可以使用此方法

代码语言:javascript
复制
numbers = [2, 4, 5, 6, 9, 4, 0, 8, 2, 4]

finale = list(dict.fromkeys(numbers))

输出:

代码语言:javascript
复制
[2, 4, 5, 6, 9, 0, 8]

作为字典不能包含重复的键,该函数从我们的列表中删除任何重复的值。然后我们可以将我们的字典转换回一个列表。

票数 0
EN

Stack Overflow用户

发布于 2021-11-02 05:37:06

正如7koFnMiP所指出的,remove()方法删除具有指定值的第一个元素。

解决这个问题的一种方法是使用pop()而不是remove(),以便能够引用要从列表中删除的对象的索引。

下面是一个示例,使用向后引用索引的迭代器开始从列表的末尾删除:

代码语言:javascript
复制
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)

输出结果与预期一致:

代码语言:javascript
复制
[2, 4, 5, 6, 9, 0, 8]

More info on the built-in function next()

More info on list comprehensions

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69805334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档