下面的串列 x 只有 3 的长度,最大索引为 2,它不应该抛出索引错误而不是空串列吗?
x = [1,2,3]
print(x[100:])
输出是
[]
uj5u.com热心网友回复:
与索引单个元素不同,允许使用切片索引越界。这对于切片很有用,例如x[1:5]
您不需要知道x
. 如果它走得太远,它将在实际资料的末尾停止。
这是一个派上用场的示例,该函式将串列分解为最大大小的块n
:
def chunk(lst: list, n: int) -> list[list]:
result = []
for i in range(0, len(lst), n):
result.append(lst[i:i n])
return result
如果您尝试使用不能被块大小完全整除的输入串列运行几次,您将看到结果中的最后一个元素将比其余元素短,即使我们没有在特殊情况下编码对于最后一块。
切片的宽容性质适用于切片的两端。如您所见,如果切片的索引完全不在串列的末尾,您会得到一个空结果而不是错误。
uj5u.com热心网友回复:
它不会抛出错误,因为您使用的是切片语法。由于您对越界序列进行切片,Python 回传空串列的结果。我认为原因是串列的该范围内没有值x
。
请参阅Sequence Types — list, tuple, range档案中的注释 4 :
从 i 到 j 的 s 切片被定义为索引为 k 的项目序列,使得 i <= k < j。如果 i 或 j 大于 len(s),则使用 len(s)。如果省略 i 或 None,则使用 0。如果省略 j 或 None,则使用 len(s)。如果 i 大于或等于 j,则切片为空。
0 评论