python - 如何使用 set 维护列表的顺序?

标签 python list sorting set sequence

In [1]: l1 = ['a',2,3,0,9.0,0,2,6,'b','a']

In [2]: l2 = list(set(l1))

In [3]: l2
Out[3]: ['a', 0, 2, 3, 6, 9.0, 'b']

在这里您可以看到列表 l2 的下降顺序与原始 l1 不同,我需要从我的列表中删除重复元素而不更改列表元素的顺序/顺序....

最佳答案

如果你不关心效率,这是O(n*m)

>>> sorted(set(l1), key=l1.index)
['a', 2, 3, 0, 9.0, 6, 'b']

使用中间字典更复杂,但是是 O(n+m*logm)

其中 n 是 l1 中元素的数量,m 是 l1 中唯一元素的数量

>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> d1=dict((k,v) for v,k in enumerate(reversed(l1)))
>>> sorted(d1, key=d1.get, reverse=True)
['a', 2, 3, 0, 9.0, 6, 'b']

在 Python3.1 中你有 OrderedDict 所以它很容易

>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] 
>>> list(OrderedDict.fromkeys(l1))
['a', 2, 3, 0, 9.0, 6, 'b']

关于python - 如何使用 set 维护列表的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562971/

相关文章:

python - 如何使用Python在本地服务器上进行基本的CRUD?

python - 从混合列表中解包元组值

python - 过滤给定条件的最小元素

python - python 检查对象是否是列表列表的代码

linux排序,选择最后一行,管道到新文件

c# - 对列表进行排序并为每个项目赋予新的排序索引

python - 正则表达式在多个空行之后捕获文本文件中的信息

python - 当数据流入 python 时,将数据输出到文本文件中

Python 列表 'in' 语句无法正常工作

list - idris中的排序列表(插入排序)