Python 添加数字时不带空格

Python 添加数字时不带空格,python,math,Python,Math,假设我有两个数字 第一: 1646 第二点: 2089 您可以看到,如果不使用随身携带,从左到右添加它们的总数将达到3625,那么如何在python中实现这一点?我不确定,但我需要它来添加9+6,也就是15,但当它添加8+4时,不能继续添加1。在python中有没有这样的添加方法?我想要的最终结果是 3625 因为它不携带剩余的数字,这有点难看,因为我不知道如何在整数中索引一个数字,只有一个字符串,但它可以工作 如果两个字符串的大小始终相同: A = str(1646) B = str(2

假设我有两个数字

第一:

1646
第二点:

2089
您可以看到,如果不使用随身携带,从左到右添加它们的总数将达到3625,那么如何在python中实现这一点?我不确定,但我需要它来添加9+6,也就是15,但当它添加8+4时,不能继续添加1。在python中有没有这样的添加方法?我想要的最终结果是

3625

因为它不携带剩余的数字,这有点难看,因为我不知道如何在整数中索引一个数字,只有一个字符串,但它可以工作

如果两个字符串的大小始终相同:

A = str(1646)
B = str(2089)
result = ""

for i in range(0,len(A)):
    result += str((int(A[i]) + int(B[i]))%10)

result = int(result)

如果两个字符串的大小不总是相同的,那么找出哪个字符串更大(按长度)。假设最大字符串的长度为X,其他长度为Y,其中X>Y。将较大字符串的第一个X-Y索引附加到结果上,然后用剩余的数字重复上述操作
import operator

n1 = 1646
n2 = 2089

l1 = [int(x) for x in str(n1)]
l2 = [int(x) for x in str(n2)]

res1 = map(operator.add, l1, l2)
res2 = [str(x)[-1] for x in res1]

num = "".join(res2)

print int(num)

因为我喜欢对“更高效”的开放式要求持有诗意许可证:

In [49]: a,b = 1646,2089

In [50]: ''.join(str(sum(map(int,x)))[-1] for x in zip(str(a),str(b)))
Out[50]: '3625'

这将适用于长度不同的N个整数:

from itertools import izip_longest

nums = [1646,
        2089,
         345]

revs = [str(n)[-1::-1] for n in nums]        # nums as reversed strings
izl  = izip_longest(*revs, fillvalue = '0')  # zip the digits together
xsum = lambda ds: str(sum(map(int, ds)))[-1] # digits -> last digit of their sum
rres = ''.join(xsum(ds) for ds in izl)       # result, but as reversed string
res  = int(rres[-1::-1])                     # result: 3960
类似的想法,但使用
map
而不是
izip\u longest
。我更喜欢这个

revs = [str(n)[-1::-1] for n in nums]           # nums as reversed strings
dsum = lambda *ds: sum(int(d or 0) for d in ds) # str-digits -> their sum
sums = map(dsum, *revs)[-1::-1]                 # digit sums, in order
ones = [str(s % 10) for s in sums]              # last digits of the sums
res  = int(''.join(ones))                       # result: 3960

即使两个数字中的位数不相同,这也会起作用

num1, num2, i, temp = 1646, 2089, 10, 0
total = num1 + num2
while num1 or num2:
    if (num1 % 10) + (num2 % 10) > 9: temp += i
    num1, num2, i = num1 // 10, num2 // 10, i * 10

print total - temp
输出

3625

数字的长度可能不同,因此将两者转换为字符串,颠倒顺序(使索引更容易),使用扩展切片([::-1],)反转,反转

result=""
A=str(1646)[::-1]
B=str(2089)[::-1]
for ndx in range(0,max(len(A),len(B)):
    result += str(int(A[ndx])+int(B[ndx]))
resut = int(result[::-1])
您可以非常轻松地获得carry,并(显式地)处理长度不等的字符串

#/bin/env python
a=1646
b=20893
A=str(A)[:-1]
B=str(B)[:-1]
lenA=len(A)
lenB=len(B)
长度=最大值(lenA,lenB)
打印“长度:”+str(长度)
#字符串添加,不带进位
total=“”
对于范围(0,长度)内的ndx:
数字=0

如果(ndx首先将数字转换为字符串,以便我们可以迭代数字:

>>> n1 = str(1646)
>>> n2 = str(2089)

然后,我们可以添加相应的数字,然后执行
%10
以获得最后一个数字。添加两个整数0-9得到的所有数字都将是。您可以尝试通过将数字转换为字符串并分别添加来拆分这些数字。是的,但是他们有更有效的方法吗?有没有更有效的方法这样做?当然这是最易读、最直接、最容易理解的方式。当你说“高效”时,你指的是快速还是最少的代码行?因为如果你指的是第一行,它真的会降低你的代码速度吗?嗯,两者都有一点,但我不想让一个庞大的代码来做这件事,Roipi有这一点,但我不确定zip工作或它到底在做什么你也只想在加上
int(A[i])+int(B[i])
后取单位数字,否则如果结果是>9…嗯,看起来不错,但你能解释一下zip在做什么吗?@ruler你拿两个iterables,然后将它们“压缩”在一起(像拉链一样)使一个2元组的数量等于最短可数的长度。但老实说,这在代码高尔夫中比其他任何东西都更有用。编写自己的函数来实现上述功能,尽管可以用更多的行来实现,但人类实际上可以阅读。仅仅因为我设法在一行中实现了这一点,并不意味着它是“pythonic”的。关于roppi,这是v这是一个聪明的()代码,但是@尺子并不是你应该考虑的代码,这是因为你不确定它在做什么。如果字符串长度不同,它会下降。“RoIPi可以枚举用于这个吗?我认为没有map的情况会更清楚一些:<代码> int(′).In(StI(int(a)+int(b))[-1)],b在IZIP(STR(N1),STR(N2))中。)
我是否可以建议将最后一个循环更改为
num=“”。join(res2)
?@SethMMorton当然:)我也是python新手,我现在就更改它。巧妙地翻转它并使用izip_.:)
>>> n1 = str(1646)
>>> n2 = str(2089)
>>> [(int(a)+int(b))%10 for a,b in zip(n1,n2)]
[3, 6, 2, 5]
>>> int(''.join(map(str,((int(a)+int(b))%10 for a,b in zip(n1,n2)))))
3625
>>> int(''.join(str((int(a)+int(b))%10) for a,b in zip(n1,n2)))
3625