繁体   English   中英

Python:在列表理解中使用嵌套循环修改列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM