在 Python 中编写单行嵌套循环

Writing a single-line nested loop in Python

我正在尝试将另一个 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 循环顺序。所以:

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

因此,您的解决方案的主要区别在于生成器部分的顺序被切换了。

转换:

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)]