为什么从单个列表构造的双端队列返回其项目而不是列表本身?

问题描述 投票:-2回答:4

我运行下面的代码:

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,但是blist。我希望q.popleft()返回[('0000', 0)]

python deque
4个回答
6
投票

deque接受一个iterable作为其参数。然后,它将可迭代的拆包,以使元素填充双端队列。

即,如果您通过

deque

[1, 2, 3]

deque

双端队列将以q = deque([1, 2, 3]) 12作为其元素。不是3

((因此,您不能使用多个参数初始化[1, 2, 3]用作其元素。)

[如果您仅将deque视为列表,

deque等效于列表deque([1,2,3]),而不是[1,2,3]。因为它等效于[[1, 2, 3]],所以您必须调用[[1, 2, 3]]


4
投票

看起来您有两个集合,一个名为deque([[1,2,3]])deque和一个名为qlist。这两个集合都包含一个元素,即元组b

当您定义('0000',0)时,您将该元素从a中弹出,因此q仅是元组。但是,您没有在a上执行类似的操作。类似的东西可能是

b

在这种情况下,c = b.pop() 是一个元组。


2
投票

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

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

]

b = ('0000',0) 接受像dequelist等的可迭代对象,并为其创建一个双端队列。因此,现在,您的列表已转变为出队。当您在strings对象上调用popleft()方法时,它将从队列中删除第一个元素并返回它。在这种情况下,项目为('0000',0)。因此,该项目的类型记录为deque

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.