我想使用列表理解以避免编写附加到某些列表的for循环。但是它可以与返回多个值的函数一起使用吗?我希望这个(简化示例)代码能正常工作...

def calc(i):
    a = i * 2
    b = i ** 2
    return a, b

steps = [1,2,3,4,5]

ay, be = [calc(s) for s in steps]

...但是不是:(

for循环附加到每个列表的工作原理是:
def calc(i):
    a = i * 2
    b = i ** 2
    return a, b

steps = [1,2,3,4,5]

ay, be = [],[]

for s in steps:
    a, b = calc(s)
    ay.append(a)
    be.append(b)

有更好的方法还是我坚持呢?

最佳答案

结合使用zip*:

>>> ay, by = zip(*(calc(x) for x in steps))
>>> ay
(2, 4, 6, 8, 10)
>>> by
(1, 4, 9, 16, 25)

关于python - 列表理解和函数返回多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19082084/

10-16 22:47