Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonZip函数-奇怪的结果_Python_Python 3.x_Generator - Fatal编程技术网

PythonZip函数-奇怪的结果

PythonZip函数-奇怪的结果,python,python-3.x,generator,Python,Python 3.x,Generator,在学习python时,遇到了zip函数,并理解它应该构建两个列表对。但是,它在我的IDE中似乎不起作用 a = ['a','b','c'] b = ['p','q','r'] r = zip(a,b) print(r) 在这里,我希望打印[('a','p'),('b','q'),('c','r')]。但是,打印输出为: 为什么会这样?我做错了什么?您正在使用Python 3。在Python 3中,zip()返回迭代器而不是列表 迭代器的计算是惰性的:一次只返回一个项,并且没有\uuuu len

在学习python时,遇到了zip函数,并理解它应该构建两个列表对。但是,它在我的IDE中似乎不起作用

a = ['a','b','c']
b = ['p','q','r']
r = zip(a,b)
print(r)
在这里,我希望打印[('a','p'),('b','q'),('c','r')]。但是,打印输出为:


为什么会这样?我做错了什么?

您正在使用Python 3。在Python 3中,
zip()
返回迭代器而不是列表

迭代器的计算是惰性的:一次只返回一个项,并且没有
\uuuu len\uuu
。迭代器最适合于循环:事实上,大部分时间
zip()
将用于循环中,在循环中一次只需要一项,从而节省内存和CPU周期


只需尝试执行
list(zip(a,b))
即可将迭代器的计算结果强制放入列表中。

您使用的是Python 3。因为Python3是惰性的(与Python2相比),像
zip
这样的收集函数返回一个
zip
对象,而不是
zip
的结果。只需使用打印(列表(r))从以下位置打印即可:

zip(*iterables)

制作一个迭代器,该迭代器聚合来自每个ITerable的元素

在Python中,使用for循环迭代对象(列表、dict、字符串等)。在较低级别上,for循环的实现方式如下:

>>> x = iter([1, 2, 3])
>>> x
<listiterator object at 0x1004ca850>
>>> x.next()
1
>>> x.next()
2
>>> x.next()
3
>>> x.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
这与:

a = ['a', 'b', 'c']
b = ['p', 'q', 'r']
r = []

for pair in zip(a, b):
    r.append(pair)

print(r)

>>> [('a', 'p'), ('b', 'q'), ('c', 'r')]
甚至更短:
r=[一对一对地压缩(a,b)]#这是一种理解

但最好的方法是使用list()。它广泛用于Python中的迭代器


我想这会对您有所帮助:)

您需要
r=list(zip(a,b))
。文档中说
zip
返回什么?“返回元组的迭代器”-迭代器,而不是元组本身。
zip的典型用法是在
for
loop@Psidom总的来说,Python3默认为惰性计算,而Python2则不会。也可以尝试
dict(zip(a,b))
[zip(a,b)中的(低,高)低+高]
a = ['a', 'b', 'c']
b = ['p', 'q', 'r']
r = []

for pair in zip(a, b):
    r.append(pair)

print(r)

>>> [('a', 'p'), ('b', 'q'), ('c', 'r')]