ゼファー:
私のpythonを使用して組み合わせに取り組んでいます。のは、私は次のリストを持っているとしましょう:
List = ['AW','BW','CW','DW','EW','FW','GW','HW']
私は次のように任意の3のための組み合わせを作成しています:
Perm =combinations( List,3)
Com = []
for i in list(Perm):
#print (i)
Com.append(i)
私は56個の組み合わせで、次の出力を得ました:
私は、以下の条件での組み合わせを削除します:
両方
List [0]
とList [1]
組み合わせて含まれています(つまり、私は、唯一のこれら二つののとの組み合わせを組み合わせて含んでいたいと思います。)両方
List [2]
とList [3]
組み合わせて含まれています(つまり、私は、唯一のこれら二つののとの組み合わせを組み合わせて含んでいたいと思います。)両方
List [4]
とList [5]
組み合わせて含まれています(つまり、私は、唯一のこれら二つののとの組み合わせを組み合わせて含んでいたいと思います。)
これは、組み合わせに含まれるリストの二つの連続成分()のいずれか一方のみを意味します。
I画像を添付し、例として除去される組み合わせを強調しています。
これを行う方法の缶誰のアドバイス私?おかげで、私はあなたの助けに感謝します。
ポールWhipp:
私が書くと考える...あなたは...私たちは、リストは、その後も、長さであると仮定します、(3,4)、(2,3)あなただけの(0,1)のいずれかをしたい制約のセットを持っていますそして、あなたが実際にしないように望んでいたことは、(0,1)の制約に違反する非常に最初の項目が含まれます。このような何かはトリックを行う必要があります。
import itertools
test_list = ['AW', 'BW', 'CW', 'DW', 'EW', 'FW', 'GW', 'HW']
# Your combinations can be obtained with itertools.combinations(test_list, 3)
def get_constraints(a, b, *rest):
return [(a, b), *(get_constraints(*rest) if rest else [])]
def constrained(combination_list, constraints):
for constraint in constraints:
if all((constraint_name in combination_list) for constraint_name in constraint):
return True
return False
def constrained_combinations(name_list):
combinations = itertools.combinations(name_list, 3)
constraints = get_constraints(*name_list)
return [combination for combination in combinations if not constrained(combination, constraints)]
constrained_combinations(test_list) ->
[('AW', 'CW', 'EW'),
('AW', 'CW', 'FW'),
('AW', 'CW', 'GW'),
('AW', 'CW', 'HW'),
('AW', 'DW', 'EW'),
('AW', 'DW', 'FW'),
('AW', 'DW', 'GW'),
('AW', 'DW', 'HW'),
('AW', 'EW', 'GW'),
('AW', 'EW', 'HW'),
('AW', 'FW', 'GW'),
('AW', 'FW', 'HW'),
('BW', 'CW', 'EW'),
('BW', 'CW', 'FW'),
('BW', 'CW', 'GW'),
('BW', 'CW', 'HW'),
('BW', 'DW', 'EW'),
('BW', 'DW', 'FW'),
('BW', 'DW', 'GW'),
('BW', 'DW', 'HW'),
('BW', 'EW', 'GW'),
('BW', 'EW', 'HW'),
('BW', 'FW', 'GW'),
('BW', 'FW', 'HW'),
('CW', 'EW', 'GW'),
('CW', 'EW', 'HW'),
('CW', 'FW', 'GW'),
('CW', 'FW', 'HW'),
('DW', 'EW', 'GW'),
('DW', 'EW', 'HW'),
('DW', 'FW', 'GW'),
('DW', 'FW', 'HW')]