我有一个接受输入并返回3项元组的函数:
def f(a, b):
x = a + 1
y = x + 2
z = y + 3
return (x, y, z)
我从一组元组开始:
my_set = {(1, 2), (3, 4), ... (m, n)}
我需要构建一个列表,但是后面会抛出一个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
我正在审查this帖子,它显示了一个类似的过程,但由于某种原因,for x,y,z …抛出了异常,我不确定我是否只是忽略了一些小事.
最佳答案 将f(a,b)解包为x,y,z是有效的,但这不是你正在做的事情.对于f(a,b)中的x,y,z,尝试解包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)))
如果你真的想使用列表推导,一个解决方法是循环遍历一个虚拟列表[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)]]