如何在Python中获取字符串的所有子集

0 投票
4 回答
5922 浏览
提问于 2025-04-18 13:33

我有一个情况,我想生成给定字符串的所有可能子集或组合。到目前为止,我尝试了这个:

def list_string(str):
   level=['']
   if len(str) <=1:
       level += str
       return level
   else:
      for item in range(len(str)):
          n_list=[]
          for item1 in level:
              n_list.append(item1 + str[item])
          level += n_list
         . return level

所以如果我调用
print list_string('ab')

我只得到了 ['', 'a', 'b', 'ab'],但是我缺少了 'ba' 这个组合。
有没有人能告诉我我哪里出错了?
我想在不使用 itertools 或其他模块的情况下做到这一点。

4 个回答

-2

我觉得你应该使用列表推导式:

def list_string(str):
  level = [x+y for x in str for y in str if len(str) > 1]
  return level

然后运行

list_string('ab')

它应该返回

['aa', 'ab', 'ba', 'bb']

现在根据你的条件来调整这个 if 语句。

希望这对你有帮助?

-1

使用列表推导式,

str= 'ab'
def subset(str)-> List[str]:
    lst= ['']
    res = ['']

    for i in range(len(str)):
        lst= [t+a for t in lst for a in str if t!=a]
        res += lst
    return res

这个方法会返回所有的排列组合:

['', 'a', 'b', 'ab', 'ba']
1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某个功能没有按照你的预期工作。这种情况可能是因为你没有正确使用这个功能,或者是因为它本身有一些限制。

有些时候,解决这些问题需要查看文档,了解这个功能的具体用法和注意事项。文档通常会提供详细的信息,帮助你理解如何正确使用这些工具。

另外,向其他开发者请教也是一个不错的选择。你可以在一些编程社区,比如StackOverflow,提问或者搜索别人遇到的类似问题,看看他们是怎么解决的。

总之,遇到问题时,不要着急,先查资料,看看有没有解决方案,或者向别人请教,通常都能找到答案。

def ios(stringinput, sub = "", i= 0):
    if i == len(stringinput):
        return [sub]
    else:
        return ios(stringinput, sub+ stringinput[i], i+1 ) + ios(stringinput, sub, i+1)



print(ios("abc"))
6

用itertools会更好,但这段递归代码挺有意思的。

def list_string(strn):
  level=[]
  def permute(prefix, suffix):
    level.append(prefix)
    if len(suffix)==0:
       return
    for i in range(len(suffix)):
      permute(prefix + suffix[i], suffix[:i]+suffix[i+1:])
  permute("",strn)
  return level

t = list_string("hey")
# ['', 'h', 'he', 'hey', 'hy', 'hye', 'e', 'eh', 'ehy', 'ey', 'eyh', 'y', 'yh', 'yhe', 'ye', 'yeh']

撰写回答