为什么从单个列表 return 构建的双端队列是它的项目而不是列表本身?

Why does a deque constructed from a single list return its item rather than the list itself?

我运行下面的代码:

from collections import deque
q = deque([('0000',0)])
a = q.popleft()

print(a)
print(type(a))

b = [('0000',0)]

print(b)
print(type(b))

输出为:

('0000', 0)
<class 'tuple'>
[('0000', 0)]
<class 'list'>

我想知道为什么 a 的类型是 tuple,而 b 的类型是 list。我预计 q.popleft() 到 return [('0000', 0)].

a 是一个元组,因为它的值包含在圆括号 ( ) 中,而 b 是一个元组列表,因为 in 包含元组 ('0000', 0)方括号内 [ ].

为了将两个变量都作为元组,您需要按如下方式重写 b:

b = ('0000',0)

deque 接收像 liststrings 等可迭代对象,并为其创建一个双端队列。所以现在,你的列表已经变成了出队。当您在 deque 对象上调用 popleft() 方法时,它会从队列中删除第一个元素并 returns 它。在这种情况下,项目是 ('0000', 0)。因此,项目的类型记录为 tuple.

在第二种情况下,您正在打印包含 tuplelist 的变量的类型。

看起来您有两个集合,一个名为 qdeque 和一个名为 blist。这两个集合都包含一个元素,一个元组 ('0000',0).

当您定义 a 时,您将该元素从 q 中弹出,因此 a 只是元组。 但是,您没有对 b 执行类似的操作。类似的东西可能是

c = b.pop()

在这种情况下,c 是一个元组。

deque 接受一个可迭代对象作为它的参数。然后解压该可迭代对象以获取填充双端队列的元素。

也就是说,如果你通过了

[1, 2, 3]

deque作为

q = deque([1, 2, 3])

双端队列的元素为 123。不是 [1, 2, 3]

(因此,您不能使用多个参数初始化 deque 作为其元素。)

如果您认为 deque 只是一个列表,

deque([1,2,3]) 相当于列表 [1,2,3],而不是 [[1, 2, 3]]。因为它等同于 [[1, 2, 3]],你必须调用 deque([[1,2,3]])

我以为当我创建一个双端队列q = deque([('0000',0)])时,第一个元素是[('0000',0)]

现在,我意识到当我像这样创建一个队列时,第一个元素是 ('0000',0)

而且我可以用很多元素初始化双端队列,比如 q = deque([('0000',0),('0002',0)])