首页 > 解决方案 > 给定数字的所有可能的子数字

问题描述

我正在开发程序以获取给定数字的所有可能(重叠和非重叠)子数字。例如 n=789。所有可能的子数字是 789,7,8,9,78,79,89。但是通过我的代码,我只得到重叠的子数字。你能帮我如何获得所有不重叠的子数字吗

  n = 789
  N = str(n)
  r = len(N)
  for i in range(0, r+1):
     for j in range(i, r+1):
         print(N[i:j])

标签: pythonpython-3.xpython-2.7

解决方案


您可以使用itertools

import itertools
def findsubsets(s):
    return [''.join([str(k) for k in i]) for j in range(len(s)) for i in itertools.combinations(s, j) if i!=()]
# Driver Code
s=789
s={int(i) for i in str(s)}
print(findsubsets(s))

更好的解决方案是:

from itertools import combinations
x = 789
y=[int(''.join(l)) for i in range(len(str(x))) for l in combinations(str(x), i+1)]
print(y)

推荐阅读