Python 查找大写字母移位的单词的所有变体

Python 查找大写字母移位的单词的所有变体,python,string,list,python-3.x,capitalization,Python,String,List,Python 3.x,Capitalization,我需要一个python函数,它可以执行以下操作: 如果输入't'和'tattle',它应该返回如下列表: ['Tattle','Tattle','Tattle'] 或者用“z”和“zzzzz”: ['Zzzzz','Zzzzz','Zzzzz','Zzzzz','Zzzzz'] 我编写了以下代码,但它不适用于第二个示例,因为当前函数检查basestr是否与结果列表R中已经存在的内容匹配,并且可以检测到由于单词中已经存在多个basestr的单词而导致的误报。有人有什么建议吗 def all_var

我需要一个python函数,它可以执行以下操作:

如果输入't'和'tattle',它应该返回如下列表: ['Tattle','Tattle','Tattle'] 或者用“z”和“zzzzz”: ['Zzzzz','Zzzzz','Zzzzz','Zzzzz','Zzzzz']

我编写了以下代码,但它不适用于第二个示例,因为当前函数检查basestr是否与结果列表R中已经存在的内容匹配,并且可以检测到由于单词中已经存在多个basestr的单词而导致的误报。有人有什么建议吗

def all_variants(wrapletter,word):
    L,R,WLU,basestr=list(word),[],wrapletter.upper(),''
    if L.count(wrapletter)==1:
        for char in L:
            if wrapletter==char:
                basestr=basestr+WLU
            else:
                basestr=basestr+char
        R.append(basestr)
        return(R)
    else:
        for i in range(L.count(wrapletter)):
            basestr=''
            if i==0 and L[0]==wrapletter:
                basestr=WLU
                for char in range(1,len(L)):
                    basestr=basestr+L[char]
                R.append(basestr)
            else:
                for char in L:
                    if wrapletter==char:
                        if WLU in basestr:
                            basestr=basestr+char
                        elif basestr in str(R):
                            basestr=basestr+char
                        else:
                            basestr=basestr+WLU
                    else:
                        basestr=basestr+char
            R.append(basestr)
        R.remove(R[0])
        return(R)

虽然不优雅,但也许这正是你需要的

target = "daaddaad"

def capitalize(target_letter, word):
    return [word[:i] + word[i].upper() + word[i + 1:]
            for i in xrange(len(word)) if word[i] == target_letter]

print capitalize("d", target)
产出:

['Daaddaad', 'daaDdaad', 'daadDaad', 'daaddaaD']

虽然不优雅,但也许这正是你需要的

target = "daaddaad"

def capitalize(target_letter, word):
    return [word[:i] + word[i].upper() + word[i + 1:]
            for i in xrange(len(word)) if word[i] == target_letter]

print capitalize("d", target)
产出:

['Daaddaad', 'daaDdaad', 'daadDaad', 'daaddaaD']
当我运行此函数时,返回了以下结果:

>>>all_variants("t", "tattle")
['Tattle', 'taTtle', 'tatTle']

>>>all_variants("z", "zzzzz")
['Zzzzz', 'zZzzz', 'zzZzz', 'zzzZz', 'zzzzZ']
当我运行此函数时,返回了以下结果:

>>>all_variants("t", "tattle")
['Tattle', 'taTtle', 'tatTle']

>>>all_variants("z", "zzzzz")
['Zzzzz', 'zZzzz', 'zzZzz', 'zzzZz', 'zzzzZ']

试试这个。我遍历每个字母,将其转换为大写,并将其和原始字符串的其他部分夹在一起

def all_variants(wrapletter, word):
    variants = []
    for i, letter in enumerate(word):
        if letter == wrapletter:
            variants.append(word[:i] + letter.upper() + word[i+1:])
    return variants

print all_variants('z', 'zzzzz')
print all_variants('t', 'tattle')

试试这个。我遍历每个字母,将其转换为大写,并将其和原始字符串的其他部分夹在一起

def all_variants(wrapletter, word):
    variants = []
    for i, letter in enumerate(word):
        if letter == wrapletter:
            variants.append(word[:i] + letter.upper() + word[i+1:])
    return variants

print all_variants('z', 'zzzzz')
print all_variants('t', 'tattle')

你对问题的陈述是“它不起作用”。这和答案“让它工作起来”一样有用。@Blorgbeard:如果你运行他的函数,你会看到他得到了什么输出,他的问题说明了期望的输出是什么。@Pound我不必运行他的代码来解决他的问题。“不起作用”可以是任何东西。你对问题的陈述是“它不起作用”。这和答案“让它工作起来”一样有用。@Blorgbeard:如果你运行他的函数,你会看到他得到了什么输出,他的问题说明了期望的输出是什么。@Pound我不必运行他的代码来解决他的问题。“不起作用”可以是任何东西。非常简单和直观。非常感谢!非常简单和直观。非常感谢!