如何根据预定义列表

时间:2018-04-27 12:12:36

标签: python python-3.x list

list1=['f','l','a','m','e','s'] #This is the predefined list
list2=['e','e','f','a','s','a'] #This is the list with repitition
x=list(set(list2)) # I want to remove duplicates
print(x)

我希望变量x保留list1所拥有的顺序。例如,如果在一个实例set(list2)将输出生成为['e','f','a','s'],我希望它生成['f','a','e','s'](仅按照list1的顺序)。 任何人都可以帮我这个吗?

4 个答案:

答案 0 :(得分:1)

构建一个字典,将字符映射到list1中的位置。使用其get方法作为排序键。

>>> dict1 = dict(zip(list1, range(len(list1))))
>>> sorted(set(list2), key=dict1.get)
['f', 'a', 'e', 's']

答案 1 :(得分:0)

这是使用字典的一种方式:

list1=['f','l','a','m','e','s'] #This is the predefined list
list2=['e','e','f','a','s','a'] #This is the list with repitition
x=list(set(list2)) # I want to remove duplicates

d = {key:value for value, key in enumerate(list1)}
x.sort(key=d.get)
print(x)
# ['f', 'a', 'e', 's']

答案 2 :(得分:0)

来自index类的方法list可以完成这项工作:

sorted(set(list2), key=list1.index)

答案 3 :(得分:0)

什么是最好的通常取决于实际使用。有了这个问题,重要的是要知道列表的预期大小,以选择最有效的方法。如果我们保留了大部分字典,则以下查询运行良好,并且具有易于阅读的额外好处。

set2 = set(list2)
x = [i for i in list1 if i in set2]

如果不先将list2转换为集合,它也可以工作。但是,对于大型list2,这会运行得慢得多。