我想创建这样的矩阵:
[[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和其他科学包。
答案 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]
但是早期的代码稍好一些,因为它重新使用单个范围对象而不是在每个内部循环上创建新的范围对象。