3 回答
TA贡献1799条经验 获得超9个赞
def add(a, k):
return [int(j) for j in str(k + int(''.join(str(i) for i in a)))]
例子
>>> add([1,2,3], 50000)
[5, 0, 1, 2, 3]
TA贡献1817条经验 获得超14个赞
您原始代码的问题在于该命令A = B+A没有按照您的预期执行。我不确定,因为您的函数返回给定值(新的、更新的A),但您的主程序假定列表已就地更改。
您返回的值是您期望的值。但是,它不再是原始对象A。该表达式B+A构建一个新列表;您的局部变量A已更改为指向该变量并返回......您的主程序忽略它。
做一个简单的改变:
A=[1,2,3]
A = addToArrayForm(A, 50000) # I corrected this to 50000; you were short a 0
输出:
5
0
1
2
3
更多问题
请注意,这是不可持续的——您不能在此列表上进行额外的数学运算,因为您将元素保留B为字符串,而不是整数。我想你会想要转换这些。
其它的办法 ...
如果您确实想就地更改 A,请尝试将这些数字推到列表的开头,就地:
...
if carry:
B = list(str(carry))
for dig in B:
A.insert(0, int(dig))
A=[1,2,3]
addToArrayForm(A, 50000)
...
TA贡献1876条经验 获得超6个赞
您可以通过转换A为整数,将其添加到K,然后用A总和替换就地来做到这一点,无论K(或A)中的位数如何,这都应该有效。
def addToArrayForm(A, K):
a = 0
for d in A:
a = a*10 + d
A[:] = [int(d) for d in str(a + K)]
return A
A = [1, 2, 3]
addToArrayForm(A, 50000)
for i in range(len(A)):
print(A[i])
输出:
5
0
1
2
3
添加回答
举报