为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星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 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信