gpt4 book ai didi

python - 通过列表理解重复列表项可变次数

转载 作者:行者123 更新时间:2023-11-30 22:53:50 25 4
gpt4 key购买 nike

我基本上是想通过这个基本的代码来理解列表理解。我试图通过列表项的值复制列表项:

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]

我似乎无法理解为什么我在第二个示例中得到错误的输出。有人可以解释一下这里出了什么问题吗?谢谢。

最佳答案

当列表理解中有多个 for 循环时,循环的处理顺序与使用“传统”for 循环的顺序相同。提供正确输出的列表组合的循环顺序与您的代码在开始时使用 .append 和传统 for 循环的顺序相同。

正如拉胡尔在评论中单独提到的,

x = [i for _ in range(i) for i in y]

会给出

NameError: name 'i' is not defined

在本例中并非如此,因为 i 是由早期代码定义的。

<小时/>

相比之下,看看嵌套列表组合会发生什么:

y = [1, 2, 0, 1]
x = [[j for j in range(i)] for i in y]
print(x)

输出

[[0], [0, 1], [], [0]]

这里,最外层循环位于外推导式中,内层循环位于内推导式中。因此,对于 for i in y 的每次迭代,我们都会创建一个新的列表 comp,并在该列表 comp 中循环 range(i)

关于python - 通过列表理解重复列表项可变次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com