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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加到数组 - 整数形式 - 如何显示完整结果?相关的知识,希望对你有一定的参考价值。

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

答案

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

您可以通过将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

以上是关于添加到数组 - 整数形式 - 如何显示完整结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Objective-C中将二维整数数组对象添加到NSMutableArray?

如何将 For 循环结果转换为数组,然后在 C# 中计算结果数组的整数?

如何将数组中键的值添加到字典中? [关闭]

如何将整数添加到数组并获得随机数?

如何在我的数组中添加货币符号?

如何在 Access 表单中显示查询结果?