从起始词 python 创建新词

Create new words from start word python

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)

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

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

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

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

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

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

我们想改变原始单词的每个字母(这里w)所以我们 迭代 w 的字母,但我们主要需要字母的索引,所以我们在 enumerate(w).

上执行 for 循环

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

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

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

我没有报告输出结果,但这正是您所要求的,请尝试...

from string import lowercase

w = 'car'
for i, _ in enumerate(w):
    x = list(w)
    for s in lowercase:
        x[i] = s
        print ''.join(x)

这可以作为一种蛮力方法,尽管当您尝试使用更长的单词时可能会遇到一些性能问题。

听起来您可能只想将其限制在某个时刻存在于字典中的单词,这是另外一回事。

但就目前而言,对于三个字母的单词,您已经走上了正确的轨道,尽管我担心这个问题对于 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.

的事实