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

时间:2019-02-14 18:25:58

标签: python arrays integer

添加到整数数组:说我有A=[1,2,3]K = 50000,我想将这两个加起来并得到A=[5,0,1,2,3]

添加它们并将进位转换为list之后,但是不知何故我无法打印出完整的数组:

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,出问题在哪里?

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

原始代码的问题是命令A = B+A并没有达到您的期望。我不确定,因为您的函数返回了给定值(新的,更新的A),但是您的主程序假定列表已就地更改。

您返回的值就是您期望的值。但是,它不再是原始对象A。表达式B+A建立一个新列表;您的 local 变量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)
...

答案 2 :(得分:0)

您可以通过将pd.DataFrame(flattened_dict) 转换为整数,将其添加到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])