在列表理解期间无法解压缩返回的元组

pst*_*tix 3 python python-3.x

我有一个接受输入并返回3项元组的函数:

def f(a, b):
    x = a + 1
    y = x + 2
    z = y + 3
    return (x, y, z)
Run Code Online (Sandbox Code Playgroud)

我从一组元组开始:

my_set = {(1, 2), (3, 4), ... (m, n)}
Run Code Online (Sandbox Code Playgroud)

我需要构建一个列表,但是后面会抛出一个TypeError:

[(a, b, x, y, z, (x, y, z)) for a, b in my_set for x, y, z in f(a, b)]
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我正在审查这篇文章,它显示了一个类似的过程,但由于某种原因,for x, y, z ...它抛出异常并且我不确定我是否只是忽略了一些小的东西.

use*_*ica 5

它是有效的解压f(a, b)x, y, z,但是这不是你在做什么.for x, y, z in f(a, b)尝试解压每个元素,f(a, b)好像每个元素都是一个单独的3元组.

你正在寻找的是一种分配f(a, b)列表理解中的东西的方法,而不是迭代它.有解决方法,但我建议只使用正常循环:

l = []
for a, b in my_set:
    x, y, z = f(a, b)
    l.append((a, b, x, y, z, (x, y, z)))
Run Code Online (Sandbox Code Playgroud)

如果您真的想使用列表推导,一种解决方法是循环遍历虚拟列表[f(a, b)]而不是f(a, b):

[(a, b, x, y, z, (x, y, z)) for a, b in my_set for x, y, z in [f(a, b)]]
Run Code Online (Sandbox Code Playgroud)