2013-03-24 3 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))