首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: Deque[-1] = Deque.pop(),给出了有趣的结果

Python: Deque[-1] = Deque.pop(),给出了有趣的结果
EN

Stack Overflow用户
提问于 2020-08-10 05:18:03
回答 2查看 175关注 0票数 1

我正在处理一个deque,并想知道为什么下面的代码会像代码那样工作:

代码语言:javascript
复制
import collections

d = collections.deque()
d.append("a")
d.append("b")
d[-1] += d.pop()
print(d)

输出:deque(['bb'])

这让我感到惊讶,因为我原以为代码会导致deque(['ab'])而不是deque(['bb'])。为什么会发生这种事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-10 05:26:30

这条线

代码语言:javascript
复制
d[-1] += d.pop()

与这一行相等。

代码语言:javascript
复制
d[-1] = d[-1] + d.pop()

python首先得到d[-1],那就是'b'

之后,运行pop方法d,该方法在python集的末尾返回'b' ( 'bb' for d[-1] )

如果您想要pop第一项,请使用popleft()函数。

编辑代码:

代码语言:javascript
复制
from collections import deque


d = deque()

d.append("a")
d.append("b")

d[-1] = d.popleft() + d[-1]

print(d)

产出:

代码语言:javascript
复制
deque(['ab'])
票数 1
EN

Stack Overflow用户

发布于 2020-08-10 05:38:10

答案很简单:

  • d-1 +=d.pop()展开为: d-1 = d-1 + d.pop()
  • d-1选择最正确的位置,在这里,b.
  • d.pop()移除最正确的--在我们的例子中是"b“,并附加到d-1,也是前一步中的b(使此为"bb"),并将其放在d-1中,而d-1是现在最合适的位置,因为d.pop()用”bb“删除了b。

如果你在前面再加一个,这是很容易解释的:

代码语言:javascript
复制
import collections
d = collections.deque()
d.append('z')
d.append('a')
d.append('b')
print ("d -1 pos is : "+d[-1])
d[-1]+=d.pop()
print (d)

输出:d -1 pos是:B deque('z','bb')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63334492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档