我可以在一行中组合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 个项目的函数。我想生成两个列表pstat1ptset1使用列表理解,但我想知道有没有一种方法不需要两次调用该函数?谢谢:)

回答

您不希望plotvex()为每组参数调用该函数两次,这是非常正确的。

所以,只是把它一次,然后生成pstat1pstat2更高版本:

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]取前两个元素


以上是我可以在一行中组合2个列表推导式吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>