我正在尝试进行内联统一分发初始化,但如果可能,似乎没有找到如何执行此操作。
我的工作代码是:
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 test”缩小到相同形式的第二个循环并最终只有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]
但显然是正确的结果。线索?
答案 0 :(得分:4)
我认为:
[[1.0/(len(row)*len(test))]*len(row) for row in test]
如果我正确地阅读你的代码。这里的魔力是因为行中的每个元素都获得相同(不可变)的值,您只需使用正确的值ala [value]*length
创建正确长度的列表。
答案 1 :(得分:3)
是的,你要找的是:
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
感兴趣