PythonZip函数-奇怪的结果
在学习python时,遇到了zip函数,并理解它应该构建两个列表对。但是,它在我的IDE中似乎不起作用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
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')]