如何创建一个看起来像这样的矩阵?我不想使用numpy。
class MinimiumEdits(object):
def mini(self,str1,str2):
temp = [[0]*len(str1)]*len(str2)
for i in range(len(temp[0])):
temp[0][i] = i
for i in range(len(temp)):
temp[i][0] = i
MinimiumEdits().mini("apple","apples")
我试过这个,这是错误的:
Object object1 = new Integer();
答案 0 :(得分:1)
内部列表都引用相同的子列表(这是列表乘法的副作用):
temp[0] is temp[1] # True
is
比较检查这些是否是同一个对象。如果您了解指针,则执行指针等式检查。不是值相等(在Python中是==
)。
这意味着所有更改都会传播到所有“行”。要解决此问题,您只需将其更改为:
temp = [[0]*len(str1) for _ in range(len(str2))]
这应该足以解决问题。
答案 1 :(得分:0)
修改强>
不导入任何东西,你可以这样做:
def get_list(val, fillvalue=0):
return [list(range(val+1))] + [[k] + [fillvalue]*val for k in range(1, val)]
# Try with different values like
# get_list(4) or get_list(3)
final = get_list(5)
print(final)
输出:
[[0, 1, 2, 3, 4, 5],
[1, 0, 0, 0, 0, 0],
[2, 0, 0, 0, 0, 0],
[3, 0, 0, 0, 0, 0],
[4, 0, 0, 0, 0, 0]]
答案 2 :(得分:0)
嗯,你可以用一种纯粹的列表理解来解决这个问题:
[[x if not y else y if not x else 0 for x in range(6)] for y in range(5)]
# [[0, 1, 2, 3, 4, 5],
# [1, 0, 0, 0, 0, 0],
# [2, 0, 0, 0, 0, 0],
# [3, 0, 0, 0, 0, 0],
# [4, 0, 0, 0, 0, 0]]