2013-03-24 2 views
1

내 프로젝트의 일부로 문자를 쌍으로 그룹화해야합니다 (고유). 목록에있는 1000 개 이상의 문자가 있습니다. 이러한 문자 목록에서 고유 한 쌍을 만드는 가장 빠르고 최적화 된 방법은 무엇입니까? 현재 itertools를 사용하고 있으며 코드가 상당히 잘못 처리 된 것으로 보입니다.항목 목록에서 쌍을 그룹화하는 Python 빠른 방법

내 코드 사용 itertools :

import itertools 

characters = ['A', 'B', 'C', 'D', 'E'] 
relations = [] 
for character in range(len(characters) + 1): 
    for combination in itertools.combinations(characters, character): 
     if len(combination) == 2: 
      relations.append(combination) 
print relations 

예상 출력 :

[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), 
('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')] 

답변

5

당신이 필요로하는 길이 2의 조합은?

In [48]: characters = ['A', 'B', 'C', 'D', 'E'] 

In [50]: list(itertools.combinations(characters, 2)) 
Out[50]: 
[('A', 'B'), 
('A', 'C'), 
('A', 'D'), 
('A', 'E'), 
('B', 'C'), 
('B', 'D'), 
('B', 'E'), 
('C', 'D'), 
('C', 'E'), 
('D', 'E')] 

길이가 3에서 len (문자)까지의 조합을 생성하고 모두 버리는 것입니다.

characters = ['A', 'B', 'C', 'D', 'E'] 
relations = list(itertools.combinations(characters, 2)) 
관련 문제