2014-07-16 2 views
-1

모든 가능한 하위 집합 또는 주어진 문자열의 조합을 생성하고자하는 경우가 있습니다.파이썬에서 문자열의 가능한 모든 부분 집합을 얻는 방법

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 

그래서 ('AB')

난 단지 얻을 [ '', 'a', 'b'가, 'AB'] 내가 인쇄 list_string를 호출하는 경우 : 지금까지 나는이 시도 목록에 'ba'가 누락되었습니다. 누구나 내가 어디에서 잘못하고 있는지 말할 수 있습니다. itertools 또는 모듈을 사용하지 않고이 작업을 수행하고 싶습니다.

이 지금 당신의 조건에 if 문을 작동

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

를 반환해야

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

그런 다음 list_string ('AB')를 실행

+6

https://docs.python.org/2/library/itertools.html#itertools.permutations – Ffisegydd

+0

구문 오류 SyntaxError있을 나타납니다 마지막 라인에서 기다리고있어. – Ffisegydd

+2

list_string (str) 및 list_str (reverse (str))에서 얻은 것의 집합을 만듭니다. – Ben

답변

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

@ gleasonK 고맙습니다. –

-1

난 당신이 지능형리스트를 사용한다고 생각합니다 . 희망이 있으십니까?

+0

나는 2 문자보다 긴 시퀀스에도 작동해야한다고 생각한다 ... –

+0

'ab '의 powerset에'aa'가 없어야합니다. –

+0

문자열'ab '에 대해서, 우리는 [' ','a ' , 'b', 'ab', 'ba'] –

관련 문제