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
添加回答
舉報