为什么从单个列表 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
接收像 list
、strings
等可迭代对象,并为其创建一个双端队列。所以现在,你的列表已经变成了出队。当您在 deque
对象上调用 popleft()
方法时,它会从队列中删除第一个元素并 returns 它。在这种情况下,项目是 ('0000', 0)。因此,项目的类型记录为 tuple
.
在第二种情况下,您正在打印包含 tuple
个 list
的变量的类型。
看起来您有两个集合,一个名为 q
的 deque
和一个名为 b
的 list
。这两个集合都包含一个元素,一个元组 ('0000',0)
.
当您定义 a
时,您将该元素从 q
中弹出,因此 a
只是元组。
但是,您没有对 b
执行类似的操作。类似的东西可能是
c = b.pop()
在这种情况下,c
是一个元组。
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]])
我以为当我创建一个双端队列q = deque([('0000',0)])
时,第一个元素是[('0000',0)]
。
现在,我意识到当我像这样创建一个队列时,第一个元素是 ('0000',0)
而且我可以用很多元素初始化双端队列,比如 q = deque([('0000',0),('0002',0)])
我运行下面的代码:
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
接收像 list
、strings
等可迭代对象,并为其创建一个双端队列。所以现在,你的列表已经变成了出队。当您在 deque
对象上调用 popleft()
方法时,它会从队列中删除第一个元素并 returns 它。在这种情况下,项目是 ('0000', 0)。因此,项目的类型记录为 tuple
.
在第二种情况下,您正在打印包含 tuple
个 list
的变量的类型。
看起来您有两个集合,一个名为 q
的 deque
和一个名为 b
的 list
。这两个集合都包含一个元素,一个元组 ('0000',0)
.
当您定义 a
时,您将该元素从 q
中弹出,因此 a
只是元组。
但是,您没有对 b
执行类似的操作。类似的东西可能是
c = b.pop()
在这种情况下,c
是一个元组。
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]])
我以为当我创建一个双端队列q = deque([('0000',0)])
时,第一个元素是[('0000',0)]
。
现在,我意识到当我像这样创建一个队列时,第一个元素是 ('0000',0)
而且我可以用很多元素初始化双端队列,比如 q = deque([('0000',0),('0002',0)])