添加到整数的数组形式 - 如何显示完整结果?

添加到整数的阵列状:说我有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 A


A=[1,2,3]

addToArrayForm(A, 5000)

for i in range(len(A) ):

    print (A[i])

结果显示:1,2,3:

但我期待5,0,1,2,3,问题出在哪里?


繁星coding
浏览 181回答 3
3回答

扬帆大鱼

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]

大话西游666

您原始代码的问题在于该命令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输出:50123更多问题请注意,这是不可持续的——您不能在此列表上进行额外的数学运算,因为您将元素保留B为字符串,而不是整数。我想你会想要转换这些。其它的办法 ...如果您确实想就地更改 A,请尝试将这些数字推到列表的开头,就地:...    if carry:        B = list(str(carry))        for dig in B:            A.insert(0, int(dig))A=[1,2,3]addToArrayForm(A, 50000)...

HUX布斯

您可以通过转换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 AA = [1, 2, 3]addToArrayForm(A, 50000)for i in range(len(A)):    print(A[i])输出:50123
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python