我想在字符串中找到与给定数字相加的连续数字.
例:
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
schwobaseggl.. 5
这种(一种)单线程将起作用:
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']
这在所有可能的切片上使用嵌套的生成器表达式,并过滤掉具有正确数字和的切片.当然,这远非最佳(特别是对于长字符串),因为一旦数字和超过,内循环应该停止,但应该给你一个想法.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']
绝对读取总和和地图.
这种(一种)单线程将起作用:
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']
这在所有可能的切片上使用嵌套的生成器表达式,并过滤掉具有正确数字和的切片.当然,这远非最佳(特别是对于长字符串),因为一旦数字和超过,内循环应该停止,但应该给你一个想法.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']
绝对读取总和和地图.