【问题标题】:Writing a single-line nested loop in Python在 Python 中编写单行嵌套循环
【发布时间】:2019-08-08 21:14:30
【问题描述】:

我正在尝试将另一个 for 循环中的一个 for 循环压缩成一行代码。这是完整的嵌套循环:

list_of_numbers = []

for i in range(4):
    for n in range(4):
        list_of_numbers.append(n)

我认为下面的代码行是将上面的代码编写为单行嵌套循环的正确方法,但它给出了错误的输出。

list_of_numbers = [n for n in range(4) for i in range(4)]

如何修改第二个代码示例以与第一个示例相同?

(此问题已改写,因此在 2019 年 8 月 13 日之前给出的任何答案都将使用前面的示例回答相同的问题。)

【问题讨论】:

  • 你是倒着做的,for ... 在列表推导中的顺序应该与等效的常规 for 循环相同

标签: python list for-loop nested-loops


【解决方案1】:

可能与直觉相反,在嵌套列表推导中,您需要遵循与普通版本相同的 for 循环顺序。所以:

[data[((len(data) - 1) - (8 * i)) - (7 - n)] for i in range(int(len(data) / 8)) for n in range(8)]

【讨论】:

    【解决方案2】:

    所以你的解决方案的主要区别是生成器部分的顺序被切换了。

    转换:

    collection_c = []
    for a in collection_a:
       for b in collection_b:
         collection_c.append(a,b)
    

    你想做的事:

    collection_c = [ (a,b) for a in collection_a for b in collection_b]
    

    所以在你的例子中你最终会得到

    new_data = [  data[((len(data) - 1) - (8 * i)) - (7 - n)] for i in range(int(len(data) / 8)) for n in range(8)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多