【发布时间】:2016-10-29 11:22:14
【问题描述】:
我基本上是在尝试使用带有这个基本代码的列表理解来解决问题。我试图通过列表项的值复制列表项:
y = [1, 2, 0, 1]
x = []
for i in y:
for j in range(i):
x.append(i)
# Desired output
>>> [1, 2, 2, 1]
x = [i for _ in range(i) for i in y]
# Wrong output
>>> [1, 2, 0, 1]
# Right output
x = [j for j in y for _ in range(j)]
>>> [1, 2, 2, 1]
我似乎无法理解为什么我在第二个示例中得到了错误的输出。有人可以解释这里出了什么问题。谢谢。
【问题讨论】:
-
您的第一个理解
[i for _ in range(i) for i in y]将在执行时出错(即name 'i' is not defined)。在嵌套列表推导中,循环是由外而内的。 -
@Rahul 它不会引发该错误,因为前面几行中的
for循环会泄漏i的值。