【问题标题】:find common and duplicate items of lists in Python [duplicate]在 Python 中查找常见和重复的列表项 [重复]
【发布时间】:2022-01-01 22:03:54
【问题描述】:

我有两个列表:

v = ['bus','car','person','bus']
vehicles=['car','bus','truck','motorcycle','auto-rickshaw']

我需要一个列表 M,它应该将列表 vvehicles 进行比较,结果类似于

M = ['car', 'bus', 'bus']

请帮助和建议。 我已经推荐了Common elements comparison between 2 lists,但它没有回答我的问题。

【问题讨论】:

  • 两个列表的交集正是你想要的。链接帖子中的答案会给您带来什么结果,这是错误的?
  • 顺序重要吗?
  • @OneCricketeer Desired output is [car, bus, bus]linked question uses sets to solve which removes duplicate values.
  • @Ch3 并非所有答案都使用集合stackoverflow.com/a/55385567/2308683
  • O(n^2) 解决方案虽然@OneCricketeer OP 没有评论这个问题的效率,但是这个问题可以像 mozway 一样在O(n) 中回答。 IMO 比链接的答案好得多,我相信它对未来的读者有用(假设不存在重复)。

标签: python list


【解决方案1】:

如果顺序无关紧要(或者更确切地说,如果您想保持v 中的顺序),请使用带有集合的列表推导作为参考,以有效识别@987654322 中每个项目的成员(O(1) @,所以总共 O(n)):

v = ['bus','car','person','bus']
vehicles=['car','bus','truck','motorcycle','auto-rickshaw']

ref = set(vehicles)

M = [e for e in v if e in ref]

输出:['bus', 'car', 'bus']

如果你真的想得到vehicles的顺序,那么之后排序可能是最有效的:

order = {k:v for v,k in enumerate(vehicles)}
M2 = sorted(M, key=order.get)

输出:

['car', 'bus', 'bus']

【讨论】:

  • 成功了,非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多