我可以在一行中组合2个列表推导式吗?
这是我的 Python 代码的一部分:
pstat1 = [plotvex(alpha,beta,j)[0] for j in range(5)]
ptset1 = [plotvex(alpha,beta,j)[1] for j in range(5)]
whereplotvex是一个返回 2 个项目的函数。我想生成两个列表pstat1并ptset1使用列表理解,但我想知道有没有一种方法不需要两次调用该函数?谢谢:)
回答
您不希望plotvex()为每组参数调用该函数两次,这是非常正确的。
所以,只是把它一次,然后生成pstat1和pstat2更高版本:
pv = [plotvex(alpha,beta,j) for j in range(5)]
pstat1 = [item[0] for item in pv]
ptset1 = [item[1] for item in pv]
回答
假设plotvex()完全返回一个 2 元组*,这应该有效:
pstat1, ptset1 = zip(*[plotvex(alpha, beta, j) for j in range(5)])
zip(*iterable_of_iterables)是将列表列表从垂直“旋转”到水平的常用习语。因此,不是一个 2 元组列表,[plotvex(alpha, beta, j) for j in range(5)]将变成两个单项列表,每个元组的每一半都有一个列表。
* 这是参数解包运算符。
*如果它返回的不仅仅是一个 2 元组,那么只需plotvex(alpha, beta, j)[:2]取前两个元素