2016-07-15 1 views
0

Я хочу, чтобы написать программу, которая будет принимать строку, скажем, «ABC», то он будет отображать:Найти все верхние, нижние и смешанные комбинации случае строка, содержащая числовые и специальные символы

abc, Abc, ABc, ABC, AbC, aBc, aBC, AbC

После того, как выкопали какое-то время, я нашел this question, который решает мою проблему, однако, если строка содержит некоторые специальные символы, такие как @ и ., это даст мне некоторые дубликаты на выходе, как я могу сделать так, чтобы только буквенные символы верхний/нижний? например, если вход является @ с выходом Шоуда только:

[email protected] 
[email protected] 
[email protected] 
[email protected] 

вот код, я использую:

import itertools 
string = '[email protected]' 
x = map(''.join, itertools.product(*((c.upper(), c.lower()) for c in string))) 
print x 

Заранее спасибо!

ответ

2

@ ответов работ Каю, но это более эффективно для удаления дубликатов символов вперед, а не ждать, пока вы не все результаты, а затем удаление дублирует там.

Разница в моем коде просто set((c.upper(), c.lower())) вместо того, чтобы просто (c.upper(), c.lower()):

import itertools 
string = '[email protected]' 
x = map(''.join, itertools.product(*(set((c.upper(), c.lower())) for c in string))) 
assert len(list(x)) == 512 
0

Попробуйте преобразовать массив в комплекте:

x = set(map(''.join, itertools.product(*((c.upper(), c.lower()) for c in string)))) 
Смежные вопросы