这些python for循环和切片是如何工作的?

ovfsdjhp  于 2023-02-14  发布在  Python
关注(0)|答案(2)|浏览(134)

1.此声明将如何工作?

j for i in range(5)

示例:

x1=(j for i in range(5))

迭代的时候会得到5个4,为什么不会得到01234,就像我们用i代替j。
1.这句话是怎么说的

a = [0, 1, 2, 3]
for a[-1] in a:
    print(a[-1])
0
1
2
2
mrfwxfqh

mrfwxfqh1#

第一个示例是生成器表达式(括号是必需的,所以你展示的第一个版本实际上没有意义)生成器表达式重复地产生j,它在你展示的代码中没有定义,但是从你的描述来看,它在你测试的环境中已经有了4的值,所以你会反复看到这个值,你从来不用i的值,它是从range中获取值的。
对于另一个循环,for a[-1] in a不断地重新绑定列表中的最后一个值,然后打印它。
for循环在forin之间赋值给目标,通常使用局部变量名(比如ij),但是你 * 可以 * 使用更复杂的赋值目标,比如self.index,或者像本例中的a[-1],在你迭代列表的时候重写它的值是非常奇怪的,但这并不禁止。
3永远不会被打印出来,因为之前的赋值语句在列表中都覆盖了它,最后一次迭代不会改变打印出来的值,因为a[-1]是赋值给它自己的。

bjg7j2ky

bjg7j2ky2#

你的第一个问题在迭代时会产生错误,因为没有定义j。如果你从那里得到任何响应,你可能已经在你的生成器上定义了j的值,在你的代码中听起来像是4
关于你的第二个问题:
当你遇到这样的情况时

for i in a:
    ...

实际上,你在每个周期都在这样做:i=a[0], i=a[1], ....
当你写a[-1] in a时,它等于:并且每次都要修改a的最后一个元素,所以最后,列表的最后一个元素是2

相关问题