Python 为什么';t海象操作符增加我的索引 来自C++,我期望一个后增量。 但正如@chepner所指出的,指数是提前增加的。 哎呀…
它确实增加了Python 为什么';t海象操作符增加我的索引 来自C++,我期望一个后增量。 但正如@chepner所指出的,指数是提前增加的。 哎呀…,python,Python,它确实增加了索引;但是表达式的值是索引的新值 打印(一倍[(索引:=索引+1)])与 aTuple = (100, 101, 102, 103) for aBool in (False, True): index = -1 if aBool: print (aTuple [(index := index + 1)]) print (aTuple [(index := index + 1)]) print (aTuple [(index
索引;但是表达式的值是索引的新值
打印(一倍[(索引:=索引+1)])
与
aTuple = (100, 101, 102, 103)
for aBool in (False, True):
index = -1
if aBool:
print (aTuple [(index := index + 1)])
print (aTuple [(index := index + 1)])
print (aTuple [(index := index + 1)])
print (aTuple [index])
print ()
'''
Expected output:
100
101
100
101
102
102
True output:
100
100
100
101
102
102
'''
因此,在循环结束时,两个print
函数看到相同的参数
--
作为避免显式索引操作的示例,可以使用具有动态选择的起点的切片:
index = index + 1
print(aTuple[index])
您正在将for
循环的开始处的索引重置为-1。它确实成功地增加了第一次打印的次数(100次打印,而不是103次,如果没有打印的话-很明显,打印语句是用索引==0
,而不是索引==-1
,这可能是因为第一次打印语句中的赋值运算符),但是下次您会重置它。所以,一次递增是100,再次递增是101,以此类推
删除该赋值,并将其保留在for循环之外,当索引爬升到3以上时,您将得到您期望的索引器。对不起,我添加了额外的赋值,我已将其编辑掉,但问题似乎仍然存在。因此,如果它赋值index=index+1,如果aBool是假的,为什么它会打印100次呢?因为打印这些的是最后两行。第一个值递增索引
,然后使用新值0。第二个值再次使用当前值0。当aBool
为真时也会发生同样的情况,只是重复的是2的索引。我明白了,你是对的!Python中通常有比遍历序列的显式索引操作更高级别的抽象。为什么您希望有这样的输出100 101
和102 102
不一致。@chepner澄清了我的错误,谢谢。请注意,如果是增量后,在任何一种情况下,您对print
的第一次调用都将使用aTuple[-1]
,即103。是的,调试时间有点长,需要喝咖啡
aTuple = (100, 101, 102, 103)
for aBool in (False, True):
for x in aTuple[:3 if aBool else 1]:
print(x)
print()