我正在尝试进行内联统一分布初始化,但似乎没有找到可能的方法。

我的工作代码是:

test = [[1,2,3],[4,5,6],[7,8,9]]
p = []
for row in test:
    prow = [1.0/(len(row)*len(test)) for x in row]
    p.append(prow)
print p
[[0.1111111111111111, 0.1111111111111111, 0.1111111111111111],
 [0.1111111111111111, 0.1111111111111111, 0.1111111111111111],
 [0.1111111111111111, 0.1111111111111111, 0.1111111111111111]]


我的问题是,有没有一种方法可以将“ for test in row”缩小到第二个循环的相同形式,并仅以1行结尾?就像是:

p = [1.0/(len(row)*len(test)) for x in row for row in test]
print p
[0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111,
 0.1111111111111111]


但显然是正确的结果。线索?

最佳答案

是的,您正在寻找的是:

In [13]: test = [[1,2,3],[4,5,6],[7,8,9]]

In [14]: p = [[1.0/(len(row)*len(test)) for x in row] for row in test]

In [15]: p
Out[15]:
[[0.1111111111111111, 0.1111111111111111, 0.1111111111111111],
 [0.1111111111111111, 0.1111111111111111, 0.1111111111111111],
 [0.1111111111111111, 0.1111111111111111, 0.1111111111111111]]


PS:您可能对list comprehension syntax感兴趣

10-07 13:30