在python 3中创建矩阵

时间:2016-05-18 11:59:13

标签: python matrix list-comprehension

我想创建这样的矩阵:

[[0, 1, 2, 3, 4, 5], [1, 0, 1, 2, 3, 4], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [4, 3, 2, 1, 0, 1],[5, 4, 3, 2, 1, 9]]

我的尝试是:

[[x if x<=5 else x-5 for x in range(x,5+x)] for x in range(1,6)]

但我给了我一些其他的结果:

[[1, 2, 3, 4, 5], [2, 3, 4, 5, 1], [3, 4, 5, 1, 2], [4, 5, 1, 2, 3], [5, 1, 2, 3, 4]]

我的代码应该更改什么?

P.S我想与列表理解,列表操作和lamda一起使用。没有numpy和其他科学包。

3 个答案:

答案 0 :(得分:2)

假设最后一个列表中的9是拼写错误,您似乎在寻找

[[abs(i) for i in range(j, j+6)] for j in range(0, -6, -1)]

在我的机器中给出了结果

[[0, 1, 2, 3, 4, 5], [1, 0, 1, 2, 3, 4], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [4, 3, 2, 1, 0, 1], [5, 4, 3, 2, 1, 0]]

答案 1 :(得分:1)

[[abs(j) for j in range(0-i,6-i)] for i in range(6)]

答案 2 :(得分:0)

无需使用$html = $isPHP表达式。 &#34;技巧&#34;是生成倒数为零的数字作为负数,然后使用if函数将它们转换为正数;已经为正的数字将不受影响。

abs

<强>输出

size = 6
r = range(size)
m = [[abs(j-i) for j in r] for i in r]

for row in m:
    print(row)

当然,矩阵可以在一行中生成:

[0, 1, 2, 3, 4, 5]
[1, 0, 1, 2, 3, 4]
[2, 1, 0, 1, 2, 3]
[3, 2, 1, 0, 1, 2]
[4, 3, 2, 1, 0, 1]
[5, 4, 3, 2, 1, 0]

但是早期的代码稍好一些,因为它重新使用单个范围对象而不是在每个内部循环上创建新的范围对象。