gpt4 book ai didi

python - For 循环使用两个变量的 enumerate()

转载 作者:行者123 更新时间:2023-11-28 21:07:49 27 4
gpt4 key购买 nike

这段代码有什么作用?我主要谈论的是 iframenum:

for i, framenum in enumerate(range(start, end + 1)):                  
s.append(self.getSkeleton(framenum))
d[i] = self.getDepth(framenum)
u[i] = to_grayscale(self.getUser(framenum))
g[i] = to_grayscale(self.getRGB(framenum))

我可以说对于 i 的每一次更改,framenum 都会更改 range(start, end + 1) 次吗?这是否等同于:

for i in enumerate(range(start, end + 1)):
for framenum in enumerate(range(start, end + 1)):
s.append(self.getSkeleton(framenum))
d[i] = self.getDepth(framenum)
u[i] = to_grayscale(self.getUser(framenum))
g[i] = to_grayscale(self.getRGB(framenum))

最佳答案

不,它们不等价。发生的情况是,在 Python 中,当可迭代对象的元素也是可迭代对象时,您可以在循环定义中解压缩它们的值,这就是第一个示例中发生的情况。

换句话说,enumerate 返回一个元组生成器。这些元组有两个元素:索引和枚举对象的实际值。

由于每个元组都有两个元素,执行 for i, framenum in... 是一种简单易读的方式来命名元组的每个元素。它基本上与将要执行的操作相同:

for tup in enumerate(range(start, end + 1)):
i = tup[0]
framenum = tup[1]

在您的第二个示例中,您对同一个可迭代对象进行了两次迭代。 iframenum 将始终是 enumerate 生成的元组之一,因此它绝对没有意义。

再举几个例子:

iterable1 = [[1,2], [3,4]]
for i, j in iterable1:
print(i)
print(j)
在第一次迭代中,

i 将为 1,j 将为 2。

for i in iterable1:
print(i)

i 在第一次迭代中将是 [1,2]

iterable2 = [[1,2,3], [4,5,6]]
for i, j, k in iterable2:
print(i)
print(j)
print(k)
在第一次迭代中,

i 将为 1,j 将为 2,k 将为 3。

for i in iterable2:
print(i)

i 在第一次迭代中将是 [1,2,3]

for i,j in iterable2:
print(i)
print(j)

这将引发错误,因为元素([1,2,3][4,5,6])不是恰好包含 2 个元素的可迭代对象。

关于python - For 循环使用两个变量的 enumerate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026335/

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