def somefunction():
outputs = []
a = 0
while a < 100:
if a%2 == 0:
b = 2*a + 1
outputs.append(list(zip(a,b)))
a += 1
return outputs
上面的代码不是我正在使用的但产生相同的错误,为什么以上代码返回:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
TypeError: zip argument #1 must support iteration
这是将函数中的所有项目作为一个返回的特别有效的方法吗?如果没有,什么是更好的方法?
答案 0 :(得分:0)
由于其确切的错误消息,它返回该错误;也就是说,zip参数必须支持迭代。你只有两个数字,你试图“存储在一起”。在这种情况下,我假设你要找的是tuple数据类型。使用您已有的列表数据类型或“将它们组合在一起”。拉链完全没必要。我建议您阅读有关Python's built-in types的更多信息。
答案 1 :(得分:0)
获取元组列表!! (或者如果您愿意,请列出,但由于您无法更改元组并希望返回所有输出,因此元组更有意义)
def somefunction():
outputs = []
a = 0
while a < 100:
if a%2 == 0:
b = 2*a + 1
tup = (a,b)
outputs.append(tup)
a += 1
return outputs
此处不需要使用zip
,zip用于将两个列表连接在一起,只有两个整数,因此您可以将它们存储在元组中,然后将append
元组存储到{{1} }}
outputs
中的所有a
和a_list
中的所有b
存储起来,Zip就会有用。然后你可以这样做:
b_list
这是不必要的,因为您可以outputs.append(zip(a_list,b_list))
append
和a
一起组成b
元组,就像我的例子一样。但这就是它的完成方式。
答案 2 :(得分:0)
在这种情况下,你也可以使用列表理解:
def f():
return [(x, 2*x + 1) for x in range(100) if x%2 == 0]