当前位置:  开发笔记 > 编程语言 > 正文

Python程序找到等于数字n的连续数值的总和?

如何解决《Python程序找到等于数字n的连续数值的总和?》经验,为你挑选了1个好方法。

我想在字符串中找到与给定数字相加的连续数字.

例:

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']

绝对读取总和和地图.



1> schwobaseggl..:

这种(一种)单线程将起作用:

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']

绝对读取总和和地图.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有