Python:从有序列表中移除不在无序列表中的条目
我有两个列表:
ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']
现在我想从有序列表中删除所有不在无序列表中的项,同时保持原来的顺序。
我该怎么做呢?
3 个回答
0
像这样:
ordered = list(filter(lambda x: x not in unordered, ordered))
如果你用的是Python 3之前的版本,那么其实用不到list
这个函数。
2
最好使用集合来测试某个元素是否存在,比如这样:
ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']
unord = set(unordered)
ordered = [e for e in ordered if e in unord]
8
ordered = [item for item in ordered if item in unordered]
这个方法是用Python的列表推导式,根据旧的列表创建一个新的列表。
对于大量数据,先把无序的列表转换成集合,就像评论里有人建议的那样,这样在性能上会有很大的提升,比如:
unordered = set(unordered)
基准测试!
有序: 5000个项目,无序: 1000个项目
没有使用集合时耗时0.09561秒
使用集合时耗时0.00042秒
对于10/2个项目,耗时几乎一样,所以无论数据大小如何,使用集合总是好的选择。