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

4 投票
3 回答
635 浏览
提问于 2025-04-17 12:52

我有两个列表:

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个项目,耗时几乎一样,所以无论数据大小如何,使用集合总是好的选择。

撰写回答