2014-05-17 2 views
1

문자열에서 길이가 2 인 순열을 생성하려고하지만 반복되는 값이 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 다음은 코드입니다 :고유 순열 생성

a = 'abba' 
from itertools import permutations 
x = [] 
x = [y for y in list(permutations(a,2)) if y not in x] 
''' 
output was this: 
[('a', 'b'), ('a', 'b'), ('a', 'a'), ('b', 'a'), ('b', 'b'), ('b', 'a'), ('b', 'a'), ('b', 'b'),('b', 'a'), ('a', 'a'), ('a', 'b'), ('a', 'b')] 
''' 

답변

1

목록의 이해가 목록을 작성, 다음 그렇게 x == [], x으로는 실행중인 모든 시간을 할당합니다. 목록 이해력이 y not in x을 확인할 때마다 x은 여전히 ​​빈 목록입니다. 물론 y은 그 안에 들어 있지 않습니다. 순서가 중요하지 않은 경우

, 당신은 대신 set 사용할 수 있습니다

x = set(permutations(a, 2)) 

그렇지 않으면, 지능형리스트를 풀다 :

x = [] 
for y in permutations(a, 2): 
    if y not in x: 
     x.append(y) 
+0

미안 해요. PLZ에 대해 설명해 주시겠습니까? : 3 –

+0

어느 부분을 이해하지 못합니까? – jonrsharpe

+0

처음에는 목록을 작성한 다음 x에 할당한다는 사실을 알고 있지만 그 중복과는 어떤 관련이 있습니까? : | –