【问题标题】:Successive iterations in one list comprehension [duplicate]一个列表理解中的连续迭代[重复]
【发布时间】:2018-11-03 19:41:54
【问题描述】:

我想使用列表推导从 2 个不同列表的元素中创建一个列表。

例如,假设我的 2 个列表是 menwomen,我想要一个包含所有名称的列表:

men_names = [man.name for man in men]
women_names = [woman.name for woman in women]
all_names = men_names + women_names

是否有获取此列表的单行解决方案?谢谢!

编辑:使用列表推导是一项要求,因为在我的特定情况下,它应该比在 for 循环中构建列表要快得多,而且性能是一个问题。

【问题讨论】:

  • all_names = [man.name for man in men] + [woman.name for woman in women] ?
  • 这不是一个真正的列表理解问题;您可以遍历多个序列并在此处对它们进行相同处理,因为在这两个列表中您所做的只是访问.name 属性。
  • manwoman的元素是什么?它们是字典吗?
  • @anishtain4:这有什么关系?他们正在迭代产生具有.name 属性的对象的东西。他们在这里拥有什么类型的迭代并不重要。
  • @MartijnPieters:他可能不需要列表理解

标签: python list-comprehension


【解决方案1】:

使用itertools.chain 是一种无需创建中间列表即可实现此目的的方法。

from itertools import chain

all_names = [person.name for person in chain(men, women)]

【讨论】:

  • 看起来不错,谢谢!现在我只需要运行一些性能测试,看看它是否比串联解决方案更快。
  • @LeNainXG 因为没有创建中间列表,你会发现它更快。干杯!
猜你喜欢
  • 2014-02-13
  • 2016-11-04
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2016-11-11
相关资源
最近更新 更多