我正在尝试优化此代码: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))如果您需要它们是列表而不是元组,您可以这样做。
添加回答
举报
0/150
提交
取消