我有两个清单:
ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']
现在我想删除有序列表中的所有条目,这些条目不在无序列表中,同时保留了排序。
我该怎么做?
答案 0 :(得分:9)
ordered = [item for item in ordered if item in unordered]
此方法使用Python的列表推导基于旧列表创建新列表。
对于大量数据,首先将无序列表转换为集合,正如人们在评论中所建议的那样,在性能上产生巨大差异,例如:
unordered = set(unordered)
订购:5000件商品,无序:1000件商品
的0.00042s
没有设置的0.09561s 设置
对于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。