我的任务是使用一个集合将重复列表转换为唯一数字列表.但是,我想保留这些职位.
我觉得很简单; 所以我创建了一个首先存储原始列表位置的字典.
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],我必须将它转换为一个集合来删除重复项.然后,我需要以相同的顺序获得包含元素的列表.(这是一项任务问题)
你可以使用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中的列表中删除重复项?