如何在Python中获取字符串的所有子集
我有一个情况,我想生成给定字符串的所有可能子集或组合。到目前为止,我尝试了这个:
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']