如何使用List Comprehension语法从2个列表中返回2个列表?

时间:2020-04-19 07:16:28

标签: python list-comprehension

对所有人, 我正在使用列表理解语法进行一些搜索。我想看看是否有可能使用1行代码从2个现有列表中返回2个列表,即使用列表理解。我碰到了这篇文章 Possible to return two lists from a list comprehension?使我认为这是可能的。独立创建新列表效果很好,我想看看我能走多远,即代码最少但仍易于阅读

考虑以下内容,我有2个预先存在的列表wnv和wdv,并希望按如下方式创建2个新列表Av和Bv;

Av,Bv=[(zeta*wn*dt,wd*dt) for i,(wn,wd) in zip(wnv,wdv)]

其中zeta和dt只是一个数字 能做到吗?使用上面的代码,我得到了错误:解压缩不可迭代的float对象

2 个答案:

答案 0 :(得分:2)

您接近了,您只需要在最后解压缩结果即可:

Av,Bv = zip(*[(zeta*wn*dt,wd*dt) for (wn,wd) in zip(wnv,wdv)])

(并从您的代码中删除i

答案 1 :(得分:0)

当zip创建一个元组列表(每个元组具有2个元素)时,该错误就会显示出来,并进行迭代。在这里,只有元组(wn,wd)是从被迭代的列表中获取的,而不是变量i。

以下代码应该可以正常工作:

Av,Bv = zip(*[(zeta*wn*dt,wd*dt) for (wn,wd) in zip(wnv,wdv)])

PS,请注意,最终结果Av和Bv实际上是元组而不是列表。