为了账号安全,请及时绑定邮箱和手机立即绑定

具有两个输出的列表理解

具有两个输出的列表理解

哆啦的时光机 2022-07-26 21:04:12
我正在尝试优化此代码:num = 10for j in xrange(0,num):  u[j],v[j] = rk4(du,dv,t,dt,u[j],v[j])其中 u 和 v 是输入数组, rk4() 为两个输入值返回两个值。使用列表理解我会做这样的事情:u,v=[rk4(du,dv,t,dt,u[j],v[j])) for j in range(0,num)]列表理解有效。但是输出格式不同。是否可以使用列表理解来优化这种操作?编辑:所需的输出将是表单的两个数组/列表u,v = [u1,u2,u3,....],[v1,v2,v3,...]我得到的是以下形式:[(u1,v1),(u2,v2),(u3,v3),...]Python列表理解
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您似乎想将一对序列转换为两个序列。zip在 Python 中有一个标准的习惯用法是使用函数和参数解包来做到这一点:


>>> seq_of_pairs = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

>>> u, v = zip(*seq_of_pairs)

>>> u

('a', 'b', 'c', 'd')

>>> v

(1, 2, 3, 4)

因此,您可以使用列表推导(或生成器表达式)生成对序列zip,然后使用该技巧提取两个序列:


result = [ rk4(..., ui, vi) for ui, vi in zip(u, v) ]

u, v = zip(*result)

u, v = map(list, zip(*result))如果您需要它们是列表而不是元组,您可以这样做。


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信