为什么deque.extendleft()会反转元素顺序?
来自官方文档:
extendleft(iterable)
Extend the left side of the deque by appending elements from iterable. Note, the series of left appends results in reversing the order of elements in the iterable argument.
这个方法的行为背后有什么原因或概念呢?我知道我可以通过使用 reversed
来轻松改变它,但我只是好奇。
1 个回答
9
假设你要用 [1, 2, 3, 4]
来扩展一个列表。这个可迭代的对象会被逐个读取,每个元素都会被加到左边。所以,整个过程是这样的:
先读取第一个元素,把它放到最左边
1
接着读取第二个元素,也把它放到最左边
2 -> 1
然后读取第三个元素,同样放到最左边
3 -> 2 -> 1
最后读取第四个元素,还是放到最左边
4 -> 3 -> 2 -> 1
这样一来,元素的顺序就被反转了。其实,这样看起来是有道理的。当我们用 list.extend
这样做的时候
[].extend([1, 2, 3, 4])
可迭代的对象会被逐个读取,并添加到列表的右边。所以,extendleft
的操作也是遵循这个模式的。