[英]Python: modifying list with nested loops in list comprehension
我有一部分代码可以执行以下操作:
import numpy as np
N = 10
test = [1] * N
np.random.seed(123)
norm = np.random.rand(N)
my_dic = {(k, kk):np.random.rand(1) for k,_ in enumerate(test) for kk in range(5)}
for i, _ in enumerate(test):
test[i] *= norm[i]
for j in range(5):
test[i] *= my_dic[(i, j)]
由于两个循环都在修改列表,因此我有办法将其转换为列表理解吗? 我一直在尝试以下变化,但没有成功:
import numpy as np
N = 10
test = [1] * N
np.random.seed(123)
norm = np.random.rand(N)
my_dic = {(k, kk):np.random.rand(1) for k,_ in enumerate(test) for kk in range(5)}
test = [val for val in norm]
test = [test[i] * my_dic[(i, j)] for i, _ in enumerate(test) for j in range(5)]
如果您坚持使用单个列表理解来执行此操作,那么我想您可以执行以下操作:
from operator import mul
from functools import reduce # comment out on Python 2.x
test[:] = [reduce(mul, [v * norm[i]] + [my_dic[(i, j)] for j in range(5)], 1)
for i, v in enumerate(test)]
要么:
test[:] = [v * norm[i] * reduce(mul, (my_dic[(i, j)] for j in range(5)), 1)
for i, v in enumerate(test)]
但真正的问题是-为什么? 您正在增加阅读和/或维护的难度,并且在绩效部门工作不多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.