【问题标题】:Matrix (Jagged Array) for in loop initialization用于循环初始化的矩阵(锯齿状数组)
【发布时间】:2014-01-21 05:10:39
【问题描述】:

我正在尝试进行内联均匀分布初始化,但如果可能的话,似乎不知道如何做。

我的工作代码是:

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 行”缩小到与第二个循环相同的形式,最终只有 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]

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

【问题讨论】:

  • 你们速度很快!谢谢!还不能接受答案。

标签: python python-2.7


【解决方案1】:

我认为是这样的:

[[1.0/(len(row)*len(test))]*len(row) for row in test]

如果我正确阅读了您的代码。这里的神奇之处在于,行中的每个元素都获得相同的(不可变的)值,您可以创建一个具有正确值的正确长度列表 ala [value]*length

【讨论】:

  • 确实很神奇。甚至没有想过这种方法。
【解决方案2】:

是的,你要找的是这个:

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感兴趣

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2019-06-17
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多