我创建了一个函数f,该函数使用二维列表作为参数,但是在此函数之后,列表完全不变。 如下面的代码:
def f(t: [[int]]):
for eachrow in t:
eachrow = eachrow[1:]
eachrow.append(0)
A = [[2, 10, 0], [3, 1, 2], [3, 2, 1]]
f(A)
print(A) # -> [[2, 10, 0], [3, 1, 2], [3, 2, 1]]
答案 0 :(得分:3)
在eachrow
中分配给eachrow = eachrow[1:]
会覆盖它。因此,要删除第一个元素,可以使用del
或row.pop
或slice assignment。
def f(t):
for row in t:
del row[0] # OR row.pop(0) OR row[:] = row[1:]
row.append(0)
A = [[2, 10, 0], [3, 1, 2], [3, 2, 1]]
f(A)
print(A) # -> [[10, 0, 0], [1, 2, 0], [2, 1, 0]]
答案 1 :(得分:-1)
如果打印出对eachrow
所做更改的结果,则会看到您正在更新eachrow
变量,但这不会影响原始的t
变量。
def f(t):
for eachrow in t:
eachrow = eachrow[1:]
eachrow.append(0)
print(eachrow)
>>> f(A)
[10, 0, 0]
[1, 2, 0]
[2, 1, 0]
如果要影响数组本身,则应按以下方式修改数组:
def f(t):
for row_number in range(len(t)):
t[row_number] = t[row_number][1:]
t[row_number].append(0)