用 'for' 枚举。为什么不报错?
Enumerate with 'for'. Why doesn't it make an error?
我知道枚举函数分别给出一个索引和元素。
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]也没有出错。这是为什么?
这与字符串切片运算符的行为有关:
当您枚举字符串列表时,切片运算符作用于每个字符串。当切片运算符中的边界之一超出字符串的边界时,不会引发异常。切片运算符的边界被默默地纠正。
例如,假设我们有字符串:
s = 'Hello World!'
那么 s[6:20]
将生成 'World!',即使 20
超出了字符串的上限。
我知道枚举函数分别给出一个索引和元素。
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]也没有出错。这是为什么?
这与字符串切片运算符的行为有关:
当您枚举字符串列表时,切片运算符作用于每个字符串。当切片运算符中的边界之一超出字符串的边界时,不会引发异常。切片运算符的边界被默默地纠正。
例如,假设我们有字符串:
s = 'Hello World!'
那么 s[6:20]
将生成 'World!',即使 20
超出了字符串的上限。