Python 删除列表中的重复项和 1==1.0 True

标签 python set duplicates

我需要删除列表中的重复值,但是使用 set()for ... if not in... 循环我只能得到部分正确的决定. 例如 ['asd', 'dsa', 1, '1', 1.0]

我得到:

['asd', 'dsa', 1, '1']

但要求的结果是:

['asd', 'dsa', 1, '1', 1.0]

我怎样才能做到这一点?

最佳答案

你可以试试

In [3]: [value for _, value in frozenset((type(x), x) for x in l)]
Out[3]: [1.0, '1', 1, 'dsa', 'asd']

我们创建一个(临时的)frozenset包含元素及其类型的元组 - 保持元素相等(例如 11.0True)但具有不同的类型。然后我们对其进行迭代,解包元组并检索元素 (value)。

当然,我们也可以使用普通的 set,它是可变的,但我们不需要可变性,因为我们的 set 是临时的。

请注意,这不一定会保留原始顺序。


如果您需要保留原始订单,请使用 collections.OrderedDict ,这是一个 HashMap (就像常规的 dict ),因此与 frozenset/set

的工作方式类似
In [16]: from collections import OrderedDict

In [17]: [value for _, value in OrderedDict.fromkeys((type(x), x) for x in l)]
Out[17]: ['asd', 'dsa', 1, '1', 1.0]

关于Python 删除列表中的重复项和 1==1.0 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231491/

相关文章:

python - iNotify 收到事件后如何关闭文件句柄

java - 设置: Prevent insertion of same type

C# 如何创建一组集合

MySQL删除子查询的所有结果

在数据列表上选择重复点

python - 分组依据,在 Pandas 中

PHP + Shell 返回 HTML

python - 如何获取字典并发送 JSON 响应

java - 如何创建 Set<String> 数组?

c# - 在没有 Linq 的情况下为 IList 的 IList 删除重复项