亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

添加到整數的數組形式 - 如何顯示完整結果?

添加到整數的數組形式 - 如何顯示完整結果?

繁星coding 2021-11-09 14:53:44
添加到整數的陣列狀:說我有A=[1,2,3],K = 50000我想補充這兩個并得到A=[5,0,1,2,3],在我添加它們并將進位轉換為列表之后,但不知何故我無法打印完整的數組:def addToArrayForm(A, K):    A[-1] += K    for i in range(len(A) - 1, -1, -1):        carry, A[i] = divmod(A[i], 10)        if i: A[i-1] += carry    if carry:        B=list(str(carry))        A=B+A    return AA=[1,2,3]addToArrayForm(A, 5000)for i in range(len(A) ):    print (A[i])結果顯示:1,2,3:但我期待5,0,1,2,3,問題出在哪里?
查看完整描述

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]


查看完整回答
反對 回復 2021-11-09
?
大話西游666

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)

...


查看完整回答
反對 回復 2021-11-09
?
HUX布斯

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


查看完整回答
反對 回復 2021-11-09
  • 3 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號