python list comprehension解压缩多个返回

时间:2011-02-20 02:15:37

标签: python list list-comprehension unzip

任何人都知道如何解析元组中的值以获得列表解析?

这是一个实际的例子:

def func(x,y):
    return x*2, y*2

x = [1, 2, 3]; y = [1, 2, 3]

a, b = [ func(i,j) for i, j in zip(x,y) ] 

不幸的是,这给了我一个错误,说'有太多值要解压...

我试过

zip(*func(i,j)) 
(a,b) = ...

3 个答案:

答案 0 :(得分:7)

你的意思是:?

a, b = zip(*[func(i,j) for i, j in zip(x,y)])

答案 1 :(得分:1)

for x1,y1 in [func(i,j) for i, j in zip(x,y)]:
     # do something with x1,y1

答案 2 :(得分:1)

问题是列表理解返回类似

的内容
[(1,1), (4,4), (6,6),..]

因此该列表不仅包含两个元素。

我不明白为什么你不能这样做:

a = [i*2 for i in x]
b = [i*2 for i in y]

如果您担心重复的代码,请创建一个函数:

def func(l):
    return [i*2 for i in l]

a, b = func(x), func(y)

尝试使用精美列表解包等将所有内容打包在一行中,并不一定会提高可读性。