【问题标题】:How to get the union of two lists using list comprehension? [duplicate]如何使用列表理解获得两个列表的并集? [复制]
【发布时间】:2014-01-02 23:31:06
【问题描述】:

考虑以下列表:

a = ['Orange and Banana', 'Orange Banana']
b = ['Grapes', 'Orange Banana']

如何得到以下结果:

c = ['Orange and Banana', 'Orange Banana', 'Grapes']

【问题讨论】:

  • 我的问题是关于列表理解的。那篇文章没有处理列表理解的问题。有答案,但是错了
  • [ x for x in b if x in a ] 这不起作用
  • 如果你问“我如何使用列表解析来做到这一点,列表理解是否是一种合理的方式来做到这一点”,这就是XY Problem 的范式。如果你问这个,那就是骗人的。
  • “我的 Y 是对的”在 SO 上太流行了。 OP知道 Y,但明确询问X
  • @Coddy 我认为这是一个公平的问题,但可以提出不同的问题——这篇文章中的 XY 果汁太多了。从非工作列表理解开始,解释它的作用(正如 abarnert 指出的那样,它是交叉点),以及需要什么。至少那时它可能会得到一些考虑..

标签: python list-comprehension


【解决方案1】:

如果你有超过 2 个列表,你应该使用:

>>> a = ['Orange and Banana', 'Orange Banana']
>>> b = ['Grapes', 'Orange Banana']
>>> c = ['Foobanana', 'Orange and Banana']
>>> list(set().union(a,b,c))
['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

【讨论】:

  • 为什么要将a, b, c 放入一个列表中,这样您就可以再次扩展该列表?只需set().union(a, b, c)
  • 哦,是的,哈哈哈……已编辑。
  • @abarnert,顺便说一句,next(takewhile(not_, count())) 的好点 =)
  • 通过使用set(),您可以消除列表中的重复项。注意'Orange Banana' 在输入中出现两次,但在输出中只出现一次。有时这可能是可取的,有时则不是。这是一个需要注意的重要特征,我们真的需要知道如何同时做到这一点。
  • set(a + b + c) 应该更快,因为它需要更少的操作
【解决方案2】:
>>> list(set(a).union(b))
['Orange and Banana', 'Orange Banana', 'Grapes']

感谢@abarnert

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多