我需要删除列表中的重复值,但是使用 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
包含元素及其类型的元组 - 保持元素相等(例如 1、1.0 和 True)但具有不同的类型。然后我们对其进行迭代,解包元组并检索元素 (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/