Задать вопрос
@KPEBETKA

Itertools.Product: как отсечь ненужные комбинации и определить количество нужных?

Генерю всевозможные комбинации символов, но после создания генератора приходится проверять что первые и последниие символы не '.' и не '-'. Возможно ли каким-либо образом избавится от условия проверки на наличие этих символов. Т.е. сделать так чтобы на этапе создания генератора подобные комбинации отсекались

Если это возможно, то появляется второй вопрос. Выражение sum([len(stringa)**i for i in rang]) станет неактуальным. И нужно суметь посчитать нужное количество комбинаций

...
rang = range(1, 5)
stringa = 'abcdefghijklmnopqrstuvwxyz1234567890.-'

print '%s combinations ' % sum([len(stringa)**i for i in rang])

for s in rang:
        for comb in itertools.product(stringa, repeat=s):
		if comb[-1] != '.' and comb[0] != '.' and comb[-1] != '-' and comb[0] != '-':
			print ''.join(comb)
...
  • Вопрос задан
  • 2818 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
@leclecovich
>подобные комбинации отсекались
docs.python.org/2/library/string.html#string.strip
Ответ написан
Комментировать
laQie
@laQie
Можно отфильтровать уже получившийся «product», я бы сделал как-то так:

from itertools import product

s = 'abcdefghijklmnopqrstuvwxyz1234567890.-'

comb = reduce(list.__add__,
              (map(''.join,
                   filter(lambda x: x[0] not in '.-' and x[-1] not in '.-',
                          product(s, repeat=i))) for i in xrange(1, 5)))
print len(comb)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы