首页 > 解决方案 > Python函数从字符串中添加数字

问题描述

我最近遇到了这个问题,并负责编写解决方案。到目前为止,我的努力已经接近但尚未解决。

本质上,问题涉及创建一个函数,该函数传递一串数字(不需要验证),例如“12345”。

我必须编写添加所有连续数字组合的函数(最好使用 Python)。对于上面的示例,这将是:

12345 + 1 + 2 + 3 + 4 + 5
+ 12 + 23 + 34 + 45
+ 123 + 234 + 345
+ 1234 + 2345

我有一些工作,例如:

#code to add the individual numbers
indivInts = [int(d) for d in stringNumber]
for i in indivInts:
        total += i

#code to add 12 + 123 + 12345, etc
for i in range(len(stringNumber)-2):
        s = ''.join([str(x) for x in indivInts[:i+2]])
        print('Adding loop 2: ' + s)
        total += int(s)

我似乎遇到的问题是“中间”数字,即 234、34 等。

该函数应该能够接受任何整数字符串并且仍然可以工作。

标签: python

解决方案


基本上,您需要原始数字的所有可能子字符串的列表。您可以为此使用带有两个循环的列表推导式的下限和上限。

>>> s = "12345"
>>> [s[i:k+1] for i in range(0, len(s)) for k in range(i, len(s))]
['1', '12', '123', '1234', '12345', '2', '23', '234', '2345', '3', '34', '345', '4', '45', '5']

然后只需获取之前生成的列表的总和,转换为int:

>>> sum(map(int, _))
16755

在一行中:

>>> sum(int(s[i:k+1]) for i in range(0, len(s)) for k in range(i, len(s)))
16755

或作为常规嵌套循环:

s = "12345"
r = 0
for i in range(0, len(s)):
    for k in range(i, len(s)):
        r += int(s[i:k+1])
print(r)

推荐阅读