Kar*_*gan 2 python list sum-of-digits
我想在字符串中找到与给定数字相加的连续数字.
例:
a="23410212"数字is=5- 输出23,41,410,0212,212.
此代码无效.我需要修理什么?
def find_ten_sstrsum():
num1="2825302"
n=0;
total=0;
alist=[];
ten_str="";
nxt=1;
for n in range(len(num1)):
for n1 in range(nxt,len(num1)):
print(total)
if(total==0):
total=int(num1[n])+int(num1[n1])
ten_str=num1[n]+num1[n1]
else:
total+=int(num1[n1])
ten_str+=num1[n1]
if(total==10):
alist.append(ten_str)
ten_str=""
total=0
nxt+=1
break
elif(total<10):
nxt+=1
return alist
Run Code Online (Sandbox Code Playgroud)
这种(一种)单线程将起作用:
def find_ten_sstrsum(s, n):
return list( # list call only in Python 3 if you don't want an iterator
filter(
lambda y: sum(map(int, y))==n,
(s[i:j] for i in range(len(s)) for j in range(i+1, len(s)+1)))
)
>>> find_ten_sstrsum('23410212', 5)
['23', '41', '410', '0212', '212']
Run Code Online (Sandbox Code Playgroud)
这在所有可能的切片上使用嵌套的生成器表达式,并过滤掉具有正确数字和的切片.当然,这远非最佳(特别是对于长字符串),因为一旦数字和超过,内循环应该停止,但应该给你一个想法.n
更高效和可读的解决方案是生成器功能:
def find_ten_sstrsum(s, n):
for start in range(len(s)):
for end in range(start+1, len(s)+1):
val = sum(map(int, s[start:end]))
if val > n:
break
if val == n:
yield s[start:end]
>>> list(find_ten_sstrsum('23410212', 5))
['23', '41', '410', '0212', '212']
Run Code Online (Sandbox Code Playgroud)