结合itertools.permutations
和itertools.product
:
from itertools import permutations, product
def perm_with_case(word):
cased = product(*zip(word.lower(), word.upper()))
next(cased) # throw away the all-lowercase result
return (''.join(p) for w in cased for p in permutations(w))
给
>>> list(perm_with_case("ab"))
['aB', 'Ba', 'Ab', 'bA', 'AB', 'BA']
>>> list(perm_with_case("dan"))
['daN', 'dNa', 'adN', 'aNd', 'Nda', 'Nad', 'dAn', 'dnA', 'Adn', 'And', 'ndA', 'nAd', 'dAN', 'dNA', 'AdN', 'ANd', 'NdA', 'NAd', 'Dan', 'Dna', 'aDn', 'anD', 'nDa', 'naD', 'DaN', 'DNa', 'aDN', 'aND', 'NDa', 'NaD', 'DAn', 'DnA', 'ADn', 'AnD', 'nDA', 'nAD', 'DAN', 'DNA', 'ADN', 'AND', 'NDA', 'NAD']
这似乎与所需的输出相匹配,尽管我承认我不明白为什么我们要扔掉全小写的值。