【问题标题】:zip function to store multiple outputs for a return statement用于存储返回语句的多个输出的 zip 函数
【发布时间】:2013-12-05 00:37:05
【问题描述】:
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

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

【问题讨论】:

  • zip 需要两个列表...不清楚您要完成什么
  • 您希望返回的值是什么?如果你想要一个 2 元组的列表,outputs.append((a, b)) 有什么问题吗?
  • 嗨,你想做什么?可能,您是否尝试返回多个值?如果是这样,在 Python 中返回多个值是完全可以接受的。
  • 听起来你想让你的函数成为一个生成器 - 查找yield
  • 我试图将循环中的所有返回分组到一个列表中,但同时保持 a 和 b 彼此相关。但在我原来的功能中,我有超过 2 个项目。

标签: python list while-loop zip append


【解决方案1】:

在这种情况下,您也可以使用列表推导:

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

【讨论】:

    【解决方案2】:

    只需获取元组列表! (如果您愿意,也可以列出,但由于您无法更改元组并且您想返回所有输出,因此元组更有意义)

    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 元组存储到outputs

    什么时候 zip 可以解决这个问题

    如果您将所有as 存储在a_list 中,并将所有bs 存储在b_list 中,Zip 将起作用。然后你可以这样做:

    outputs.append(zip(a_list,b_list))
    

    这是不必要的,因为您可以像我的示例一样将 append ab 一起放在 output 的元组中。但这就是它的方式。

    【讨论】:

      【解决方案3】:

      由于其确切的错误消息,它会返回该错误;也就是说,zip 参数必须支持迭代。您只有两个要“存储在一起”的数字。在这种情况下,我假设您正在寻找的是 tuple 数据类型。或者将它们与您已经拥有的列表数据类型“放在一起”。拉链是完全没有必要的。我建议阅读更多关于Python's built-in types 的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-31
        • 1970-01-01
        • 2012-10-04
        • 2021-01-26
        • 1970-01-01
        • 2019-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多