我运行下面的代码:
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()
返回[('0000', 0)]
。
deque
接受一个iterable作为其参数。然后,它将可迭代的拆包,以使元素填充双端队列。
即,如果您通过
deque
至[1, 2, 3]
为
deque
双端队列将以q = deque([1, 2, 3])
,1
和2
作为其元素。不是3
((因此,您不能使用多个参数初始化[1, 2, 3]
用作其元素。)
[如果您仅将deque
视为列表,
deque
等效于列表deque([1,2,3])
,而不是[1,2,3]
。因为它等效于[[1, 2, 3]]
,所以您必须调用[[1, 2, 3]]
看起来您有两个集合,一个名为deque([[1,2,3]])
的deque
和一个名为q
的list
。这两个集合都包含一个元素,即元组b
。
当您定义('0000',0)
时,您将该元素从a
中弹出,因此q
仅是元组。但是,您没有在a
上执行类似的操作。类似的东西可能是
b
在这种情况下,c = b.pop()
是一个元组。
[c
是一个元组,因为它的值包含在圆括号a
(
中,而b是一个元组列表,因为在方括号)
('0000', 0)
内包含元组[
。 >
为了将两个变量都作为元组,您需要按以下方式重写b:
]
b = ('0000',0)
接受像deque
,list
等的可迭代对象,并为其创建一个双端队列。因此,现在,您的列表已转变为出队。当您在strings
对象上调用popleft()
方法时,它将从队列中删除第一个元素并返回它。在这种情况下,项目为('0000',0)。因此,该项目的类型记录为deque
。
[在第二种情况下,您正在打印包含tuple
个list
s的变量的类型。
我以为,当我创建双端队列tuple
时,第一个元素是q = deque([('0000',0)])
。