Python 列表推导式解压多个返回值

2 投票
3 回答
2380 浏览
提问于 2025-04-16 12:08

有没有人知道怎么在列表推导式中解包元组的值?

举个实际的例子:

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)])

撰写回答