Python:从有序列表中删除不在无序列表中的条目

时间:2012-02-11 22:53:45

标签: python list sorting

我有两个清单:

ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']

现在我想删除有序列表中的所有条目,这些条目不在无序列表中,同时保留了排序。

我该怎么做?

3 个答案:

答案 0 :(得分:9)

ordered = [item for item in ordered if item in unordered]

此方法使用Python的列表推导基于旧列表创建新列表。

对于大量数据,首先将无序列表转换为集合,正如人们在评论中所建议的那样,在性能上产生巨大差异,例如:

unordered = set(unordered)

基准!

  

订购:5000件商品,无序:1000件商品
  没有设置的0.09561s   设置

的0.00042s

对于10/2项目,时间几乎相同,因此无论数据大小如何,始终使用集合都是好的。

答案 1 :(得分:2)

最好使用一套测试成员资格,如下所示:

ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']

unord = set(unordered)
ordered = [e for e in ordered if e in unord]

答案 2 :(得分:0)

这样的事情:

ordered = list(filter(lambda x: x not in unordered, ordered))

如果使用Python&lt; <{1>},则不需要list函数。 3。