1

プロジェクトの一環として、キャラクターをペアとしてグループ化する必要があります(一意)。リストにはこれらの文字が1000個以上あります。これらの文字のリストから一意のペアを作成するための最速で最適化された方法は何でしょうか。現在itertoolsを使用していますが、コードのパフォーマンスがかなり悪いようです。

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')]
4

1 に答える 1

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))
于 2013-03-24T23:28:40.497 に答える