我'm teaching myself Python ahead of starting a new job. Its a Django job, so I have to stick to 2.7. As such, I'正在阅读Hetland的Beginning Python,并且不理解他使用切片复制 list.extend()
功能的例子 .
首先,他通过显示 extend
方法
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
产生 [1, 2, 3, 4, 5, 6]
接下来,他通过切片来演示扩展
a = [1, 2, 3]
b = [4, 5, 6]
a[len(a):] = b
它产生与第一个例子完全相同的输出 .
这是如何运作的? A的长度为3,终止切片索引点为空,表示它运行到列表的末尾 . 如何将 b
值添加到 a
?
4 回答
Python的切片赋值语法意味着“使此切片等于此值,必要时扩展或缩小列表” . 要完全理解它,您可能想要尝试一些其他切片值:
首先,让我们用
B
替换A
的一部分:您可以通过指定零长度切片来添加它们,而不是替换某些值:
任何“超出范围”的切片都只是简单地在列表的一端或另一端寻址空区域(太大的正数将在结束时解决该点,而过大的负数将在开始之前解决该点) ):
您的示例代码只使用列表末尾最“准确”的超出范围切片 . 我不认为这是你故意用于扩展的代码,但它可能是一个有用的边缘情况,你不需要处理特殊的逻辑 .
它只是普通索引的扩展 .
setitem() method检测到正在使用切片而不是正常索引,并且行为正常 .
表示位置len(a)中的元素是b中的元素 . 这意味着用b扩展a .
对于演示,请考虑查看
list
的子类:在Python 3上运行:
在Python 2上运行:
当你第一次学习它时会感到困惑,但我想你会学会爱它 .