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

Mar*_*tin 4 python sorting list

我有两个清单:

ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

Ole*_*pin 9

ordered = [item for item in ordered if item in unordered]
Run Code Online (Sandbox Code Playgroud)

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

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

unordered = set(unordered)
Run Code Online (Sandbox Code Playgroud)

基准!

订购:5000件无序:1000件
0.09561s未设置
0.00042s

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

  • 这可能是我要做的,虽然如果列表很长,我可能会制作一个无序的设置版本来加速会员资格测试. (3认同)