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

2024-06-17 12:59:18 发布

您现在位置: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() 

因此,我需要有(作为示例,它将很短)列表\=[密码、密码、密码、密码等] 我尝试过使用itertools.permutation,但对于较长的单词(如密码),脚本无法完成迭代

提前感谢您对此问题的支持


2条回答

下面是使用来自itertoolsproduct

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")]

相关问题 更多 >