zip函数,用于存储return语句的多个输出

时间:2013-11-20 20:01:17

标签: python list while-loop zip append

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

这是将函数中的所有项目作为一个返回的特别有效的方法吗?如果没有,什么是更好的方法?

3 个答案:

答案 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} }}

当zip适用于此

时 如果您将outputs中的所有aa_list中的所有b存储起来,

Zip就会有用。然后你可以这样做:

b_list

这是不必要的,因为您可以outputs.append(zip(a_list,b_list)) appenda一起组成b元组,就像我的例子一样。但这就是它的完成方式。

答案 2 :(得分:0)

在这种情况下,你也可以使用列表理解:

def f():
    return [(x, 2*x + 1) for x in range(100) if x%2 == 0]