更改给定字符串中的大写字母 - Python

Changing letters for uppercased in a given string - Python

我正在尝试编写一个函数,该函数将根据相同的单词创建一个字符串列表,但不同的字母大写。目前我有这样的东西:

word = 'passwordPASSWORD'

def generator():
    list_ = []
    result = itertools.permutations(word, (len(word)//2)))
    for el in result:
        x = ''.join(list(map(lambda x: x.lower(), el)))
        if x == 'password':
            list_.append(''.join(el))
    return list_

generator() 

因此我需要(作为例子会很短)list_ = [password, pAssword, PaSSwORd ,passWORD, ......etc.] 我试过 itertools.permutation 但对于更长的单词(如密码),脚本无法完成迭代。

在此先感谢您对此问题的支持。

此处使用 itertools 中的 product

from itertools import product

word = 'password'

[''.join(x) for x in product(
    *[[l.upper(), l.lower()] for l in word])]

输出:

['PASSWORD',
 'PASSWORd',
 'PASSWOrD',
 'PASSWOrd',
 'PASSWoRD',
 'PASSWoRd',
 'PASSWorD',
 'PASSWord',
 'PASSwORD',
 'PASSwORd',
 'PASSwOrD',
 'PASSwOrd',
 'PASSwoRD',
 'PASSwoRd',
 'PASSworD',
...

尝试使用这个函数:

def all_casings(input_string):
    if not input_string:
        yield ""
    else:
        first = input_string[:1]
        if first.lower() == first.upper():
            for sub_casing in all_casings(input_string[1:]):
                yield first + sub_casing
        else:
            for sub_casing in all_casings(input_string[1:]):
                yield first.lower() + sub_casing
                yield first.upper() + sub_casing

并这样称呼它:

[x for x in all_casings("foo")]