2015-07-18 2 views
0

Использование itertools.combinations, следующие прекрасно работает:Python: создавать комбинации N, где 2 из элементов постоянны

for letter_group in itertools.combinations(alphabet, 5): 
    print letter group 

Теперь я хочу, чтобы первые 2 из 5 элементов в комбинации постоянных. Есть ли способ сделать это?

Например, вывод будет такой:

(a,b,c,d,e) 
(a,b,e,f,g) 
... 
(a,b,x,y,z) 
+0

Каковы ваши фактические данные? –

ответ

3

Ну, я думаю, что вы пытаетесь сделать, это 5-кортежи, где первые 2 указаны и последние 3 взят из итератора называемый alphabet, но где последние 3 не могут повторно использовать первые два.

Как об этом:

start = ('a', 'b') 
for ending in itertools.combinations(set(alphabet) - set(start), 3): 
    print start + ending 
+0

Я понял в своем прецеденте, начало было бы просто некоторым общим итерабельным. Поэтому нужно было бы использовать его как набор. Если он находится под полным контролем, уверен, продолжайте и начните «старт» с самого начала. – 8one6

0

Просто сделайте alphabet без первых двух букв, не комбинации остальных, то свяжитесь с [ «A», «B»] с результатом, то работоспособной код:

# -*- coding: utf-8 -*- 
import string 
import itertools 

alphabet = string.letters[:26] 
prefix = ['a', 'b'] 

for letter_group in itertools.combinations(alphabet[len(prefix):], 3): 
    print prefix + list(letter_group)