Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表的奇怪行为_Python_List - Fatal编程技术网

Python列表的奇怪行为

Python列表的奇怪行为,python,list,Python,List,为什么这段代码在Python解释器运行时不会抛出错误 a = ['A', 'B', 'C'] a[20:] = ['D', 'E'] print a 输出是['A','B','C','D','E']。我以为Python会在第二条语句中给我一个错误,因为a只有3个元素。编码时,此功能是否有任何自然用途 python就是这样工作的。在用于切片的python中,不会进行边界检查。它只是扩展您的列表,因为它是一个可变对象 当您通过切片读取边界时,这也很有趣: f = a[20:] f将是一个空列表

为什么这段代码在Python解释器运行时不会抛出错误

a = ['A', 'B', 'C']
a[20:] = ['D', 'E']
print a

输出是
['A','B','C','D','E']
。我以为Python会在第二条语句中给我一个错误,因为
a
只有3个元素。编码时,此功能是否有任何自然用途

python就是这样工作的。在用于切片的python中,不会进行边界检查。它只是扩展您的列表,因为它是一个可变对象

当您通过切片读取边界时,这也很有趣:

f = a[20:]

f
将是一个空列表

这比阅读
a[20:][/code>意义要小得多。非常奇怪的是,
assert['D','E']==a[20:][/code>会在这里失败,这对于切片索引的工作方式是有意义的。由于
a[3:][==a[20:][/code>,因此,由于C级别的内部实现,如果为空,它将简单地附加元素或覆盖所选范围。@Eric:
a[20:][/code>将只返回一个空列表。@tuxtimo:确实如此。我的观点是,以下行为与a[:20]=x的行为相同,这让我觉得是不正确的行为;第一眼就断言一个[:20]==x
@Eric=Yes。如果你仔细看:如前所述,带有切片的赋值没有边界检查,所以它只是将项附加到列表中(这就是它的工作方式,我不知道确切的impl细节)。我能说的是,值不会插入到切片的开始,而不是列表的结尾。因此,您无法在预期的位置访问它们。