【发布时间】:2021-11-17 08:30:00
【问题描述】:
我知道 enumerate 函数分别给出了索引和元素。
for idx, batch in enumerate(['A', 'B', 'C']):
print(batch[0])
结果:
A
B
C
没关系,而
print(batch[1])
出错,字符串索引超出范围。
我想问的是,
for idx, batch in enumerate(['A', 'B', 'C']):
print(batch[0:6])
得到结果
A
B
C
尤其是,它不仅适用于 6。7,8 或任何大于 0(整数)的东西都会产生结果。
另外,batch[0:0] 没有出错。这是为什么呢?
【问题讨论】:
-
不使用
idx变量为什么还要使用枚举? -
如果
batch是字符串'A'那么batch[0]是字符A,没有batch[1]。 -
这与
enumerate或for循环无关;您可以只用一个字符串复制相同的行为。来自this answer on slices:“如果项目比你要求的少,Python 对程序员很友好。例如,如果你要求a[:-2]和a只包含一个元素,你会得到一个空列表而不是错误。” -
@CrazyChucky 从我的问题来看,batch[0:5] 的意思是:batch[0],batch[1]..... 然后batch[0] 没问题,但是当它去的时候batch[1],那为什么没有发生错误呢?所以你的意思是我只有一个空列表?
-
正如我在链接和引用的答案中提到的,这就是切片在 Python 中的工作方式。
batch[1]会抛出错误,是的。但是,如果您正在切片的序列用完项目,切片不会引发索引错误。