【问题标题】:Convert a nested for loop into a nested list comprehension [duplicate]将嵌套的for循环转换为嵌套列表理解[重复]
【发布时间】:2019-01-24 10:35:26
【问题描述】:

我有一个嵌套的 for 循环,但我一生都无法弄清楚如何将其转换为嵌套列表理解。我似乎不明白嵌套列表组合是如何工作的,所以如果您也可以添加解释,那将非常有帮助。

这是我试图通过循环从中提取的数据结构(用于营销 API):

list_of_orders = [{'Campaign ID': 1234, 'Orders': [{'Order ID': 0001, ...}, {'Order ID': 0002, ...}, ...]}, {'Campaign ID': 5678, 'Orders': [{...}, ...]}, ...]

这是循环:

order_ids = []
for i in list_of_orders:
    for order in i.get('Orders'):
        order_ids.append(str(order.get('Order ID')))

我如何 - 并且应该 - 将其转换为列表组合?这是更快/更 Pythonic/更好的做法吗?

【问题讨论】:

  • 为什么这被认为是重复的?这是关于嵌套列表推导,而不是一般的列表推导。

标签: python for-loop nested list-comprehension


【解决方案1】:

以下应该有效:

order_ids = [str(order.get('Order ID')) for i in list_of_orders for order in i.get('Orders')]

嵌套的 for 表达式的顺序对某些人来说是违反直觉的,因为它并不真正对应于自然语言范围。

它可能比基于循环的方法快一点,但它具有相同的渐近时间复杂度。虽然理解是 Pythonic,但 Zen of Python 声明:“可读性很重要”!所以我会坚持循环。

【讨论】:

  • 非常感谢,这非常有帮助!我想通过这个例子,我也得到了我对嵌套列表组合的不理解(普通的列表组合很好,我很喜欢它们并且经常使用它们!)。因此,如果我理解正确,您要检索的应该是第一个(order.get('Order ID'),然后您逐级进行i ... for order ...->如果我想到一个for循环,把我想附加的东西放在第一位,然后跟着循环,我应该得到列表comp结构。对吗?
【解决方案2】:

我怎样才能 - 我应该 - 将其转换为列表组合?这是更快/更 Pythonic/更好的做法吗?

是的。没有。没有。

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2021-09-02
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多