从开始单词python创建新单词

时间:2015-02-12 20:43:58

标签: python string replace

def make_new_words(start_word):
    """create new words from given start word and returns new words"""
    new_words=[]
    for letter in start_word:
        pass    
        #for letter in alphabet:
        #do something to change letters
        #new_words.append(new_word)

我有三个字母的单词输入,例如汽车,它是起始单词。 然后我必须通过用字母表中的每个字母一次替换一个字母来创建新单词。使用我的示例汽车,我想创建单词,aar,bar,car,dar,ear,...,zar。然后创建单词car,cbr,ccr,cdr,cer,...,czr。最后是caa,cab,cac,cad,cae,...,caz。

我真的不知道for循环应该是什么样的。我正在考虑创建某种字母表列表,并通过循环创建新单词,但我不知道如何选择原始单词的哪些部分应该保留。新单词可以附加到要返回的列表中。

5 个答案:

答案 0 :(得分:3)

import string

def make_new_words(start_word):
    """create new words from given start word and returns new words"""
    new_words = []
    for i, letter in enumerate(start_word):
        word_as_list = list(start_word)
        for char in string.ascii_lowercase:
            word_as_list[i] = char
            new_words.append("".join(word_as_list))

    return new_words 

答案 1 :(得分:1)

lowercase只是一个包含小写字母的字符串......

我们想要更改原始单词的每个字母(此处为w),以便我们 迭代w的字母,但我们主要需要字母的索引,所以我们在enumerate(w)上进行循环。

首先,在python中,字符串是不可变的,所以我们从x构建一个列表w ...列表是可变的

现在是小写字母的第二个内部循环:我们相应地更改x列表的当前元素(已更改x,我们需要在下一个内循环之前重置它),最后我们打印出来。

因为我们要打印字符串而不是列表中的字符,所以我们使用空字符串join的{​​{1}}方法,将''的元素粘合在一起使用,当然,空字符串。

我没有报告输出,但它确实是你所要求的,只是试试......

x

答案 2 :(得分:0)

import string
all_letters = string.ascii_lowercase
def make_new_words(start_word):
    for index, letter in enumerate(start_word):
        template = start_word[:index] + '{}' + start_word[index+1:]
        for new_letter in all_letters:
            print template.format(new_letter)

答案 3 :(得分:0)

你可以用两个循环,循环遍历单词然后循环遍历所有字母的范围。通过保留第一个循环的索引,您可以使用切片来构造新的字符串:

for index in enumerate(start_word):
    for let in range(ord('a'), ord('z')+1):
        new_words.append(start_word[:index] + chr(let) + start_word[index+1:])

答案 4 :(得分:0)

这可以作为一种蛮力的方法,但是当你用更长的单词来尝试它时,你可能会遇到一些性能问题。

听起来你可能只想把它限制在某个字典中存在的单词,这是另外一种蠕虫。

但就目前来说,对于三个字母的单词,你会走上正确的轨道,尽管我担心这个问题可能对Stack Overflow来说有点过于具体。

首先,如果你遍历单词的索引而不是字母,你可能会取得更大的成功:

alphabet = 'abcdefghijklmnopqrstuvwxyz'
for i in range(len(start_word)):

然后,您可以使用slice来获取索引前后的字母。

  for letter in alphabet:
    new_word = start_word[:i] + letter + start_word[i + 1:]

上面给出了另一种方法,它将字符串转换为列表。这解决了python不允许简单地设置start_word[i] = letterwhich you can read about here

的事实