-2

因此,我一直在学习 Python 中的列表推导,但不了解嵌套列表推导在 Python 中如何工作的逻辑。考虑以下代码片段:

####TRADITIONAL EXAMPLE-1###
L = []
for i in range(5):
   for j in range(4):
      L.append(j)

#output of l-> [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

####TRADITIONAL EXAMPLE-2###
K = []
for i in range(5):
   for j in range(4):
      K.append(i)

#output of k -> [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]

好的,这一切都说得通,但是当我想使用列表推导重新创建这些时,逻辑对我来说没有意义。现在考虑这些例子:

###LIST COMPREHENSION EXAMPLE-3####
L1 = [j for j in range(4) for i in range(5)]
#Output of L1 -> [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]

###LIST COMPREHENSION EXAMPLE-4####
K1 = [i for j in range(4) for i in range(5)]
#Output of K1 -> [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

###LIST COMPREHENSION EXAMPLE-5####
Q = [[j for j in range(4)] for i in range(5)]
#Output of Q -> [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

###LIST COMPREHENSION EXAMPLE-6####
Q1 = [[i for j in range(4)] for i in range(5)]
#output of Q1 -> [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]

所以我不知道为什么,但我希望输出 L 和 L1(示例 1 和 3)是相同的,无论使用传统方式还是列表理解方式,K 和 K1(示例 2 和 4)也是如此当我比较 Q 和 Q1 的输出时(例如 5 和 6)。就像比较 Q1 和 K1(示例 4 和 6)一样,它们几乎遵循相同的语法,但输出却大不相同。

我希望我能够根据与传统方式相比,这些列表理解中的每一个给出的输出来澄清我的困惑。我尝试在线搜索并遵循教程,但它们只是陈述示例,而不是解释其背后的工作或逻辑。我只是不想在不知道输出为何如此的原因的情况下搞砸输出。谢谢您的帮助 :)

4

1 回答 1

2

所以我不知道为什么,但我希望输出 L 和 L1(示例 1 和 3)无论使用传统方式还是列表理解方式都是相同的

您没有以正确的方式使用列表推导。您的内部和外部循环在您的示例中交换为L1.

L1 = [j for i in range(5) for j in range(4)]

输出:

[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

请参阅答案以了解有关定义具有两个或更多循环的列表推导的更多信息。

记住这一点的最好方法是列表推导中 for 循环的顺序是基于它们在传统循环方法中出现的顺序。最外层循环首先出现,然后是内层循环。

K 和 K1 也是如此:

K1 = [i for i in range(5) for j in range(4)]

输出:

[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]

特别是当我比较 Q 和 Q1 的输出时(例如 5 和 6)

但是,当您使用像 in 中的列表推导式时Q,在这些示例中您没有嵌套 for 循环。它被称为嵌套列表理解。有关嵌套循环理解的信息,请参阅this

于 2020-02-02T10:48:58.987 回答