使用set时保持相同的顺序

use*_*731 0 python

我的任务是使用一个集合将重复列表转换为唯一数字列表.但是,我想保留这些职位.

我觉得很简单; 所以我创建了一个首先存储原始列表位置的字典.

def get_positions(a): 
    positions = {}

    for ele in a: 
        if not ele in positions:
            positions[ele] = a.index(ele) 

    return positions
Run Code Online (Sandbox Code Playgroud)

所以我要说我有一个清单 a = [1, 2, 4, 4, 5]

职位会给我一本字典{0:1, 1:2, 2:4, 3:4, 4:5}.

然而这是不成功的,因为我重复的数字将不会存储他们的位置.

有没有办法实现这个目标?

谢谢.

更新:

看来我不清楚.我需要使用一套.所以,我得到一个列表a = [1,2,4,4,5],我必须将它转换为一个集合来删除重复项.然后,我需要以相同的顺序获得包含元素的列表.(这是一项任务问题)

ars*_*jii 6

你可以使用OrderedDict:

>>> from collections import OrderedDict
>>> 
>>> a = [1, 2, 4, 4, 5]
>>> 
>>> list(OrderedDict.fromkeys(a))
[1, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)

可以使用平原set.一种常见的方式是:

>>> a = [1, 2, 4, 4, 5]
>>> 
>>> seen = set()
>>> [x for x in a if x not in seen and not seen.add(x)]
[1, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)

这里的诀窍是not seen.add(x)永远是True因为add()总是回归None.在实践中,我总是会使用这种OrderedDict方法.

另请参阅:如何在保留顺序的同时从Python中的列表中删除重复项?

  • 你可以使用`.fromkeys()`. (2认同)