Python 列表推导式解压多个返回值
有没有人知道怎么在列表推导式中解包元组的值?
举个实际的例子:
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 个回答
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)
把所有东西都放在一行里,使用一些复杂的列表解包等,并不一定会让代码更容易理解。
1
for x1,y1 in [func(i,j) for i, j in zip(x,y)]:
# do something with x1,y1
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更容易理解。
8
你是说下面这个吗?:
a, b = zip(*[func(i,j) for i, j in zip(x,y)])