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

问题描述 投票:0回答:3

添加到数组 - 整数形式:说我有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,问题在哪里?

python arrays integer
3个回答
0
投票

您的原始代码的问题是命令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)
...

1
投票
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]

0
投票

您可以通过将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
© www.soinside.com 2019 - 2024. All rights reserved.