【问题标题】:List comprehension over 2 independent lists对 2 个独立列表的列表理解
【发布时间】:2021-11-22 06:17:40
【问题描述】:

我有两个列表,例如:

a = [10, 35, 57, 79]
b = [13, 41, 65, 80]

我想获取包含数字和值对的列表,其中值是 True 列表中的元素 a

我可以做到;

a_list = [(item, True) for item in a]
b_list = [(item, False) for item in b]
result = a_list + b_list

是否可以将这两种列表推导结合起来,让代码更简单?

【问题讨论】:

  • 好吧,你可以把列表加在一起:[(item, True) for item in a] + [(item, False) for item in b]
  • 我会说代码已经尽可能地简单易读(可能除了上面的注释),尝试组合事物以节省代码行可能会使情况变得更糟。

标签: python list-comprehension


【解决方案1】:

我可以建议:

list(zip(a + b, [True] * len(a) + [False] * len(b)))

【讨论】:

  • 我不会说这比原版更具可读性,而且它可能会更慢。
  • 使用docs.python.org/3/library/itertools.html中的chainrepeat会比+*表现更好
  • @Ruslan Tushov,谢谢!尽管我对其进行了测试,但前一种方法的速度快了约 15%。至少对于这种规模的输入,我认为如果输入更大,您的建议会更有效。 list(zip(chain(a, b), chain(repeat(True, len(a)), repeat(False, len(b))))).
  • 似乎单链会更快:list(chain(((i, True) for i in a), ((i, False) for i in b)))。但我无法在手机上进行测试。
【解决方案2】:

你可以用这个:

[y for x in [list1, list2] for y in x]
a = [10, 35, 57, 79]
b = [13, 41, 65, 80]

result = [y for x in [[(item, True) for item in a], [(item, False) for item in b]] for y in x]

【讨论】:

  • 欢迎来到 Stack Overflow。没有任何解释的代码很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请编辑您的问题并解释它如何回答所提出的具体问题。见How to Answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多