如何在python中获取字符串的所有可能子集

问题描述 投票:-1回答:3

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

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

所以如果我打电话打印list_string('ab')

我只得到['','a','b','ab']我在列表中缺少'ba'。谁能告诉我我在哪里做错了。我想这样做而不使用itertools或模块。

python
3个回答
2
投票

最好不要使用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']

0
投票

使用列表理解,

str= ['a','b']
def (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']

-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语句用于您的条件。希望有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.