从单词python开始创建新词
我有一个三个字母的单词输入,例如car,它是起始单词。 然后,我必须创建一个新单词,每次用字母表中的每个字母替换一个字母。使用我的示例car,我想创建单词,aar,bar,car,dar,ear,…,zar。然后创建单词car、cbr、ccr、cdr、cer、…、czr。最后是caa,cab,cac,cad,cae,…,caz从单词python开始创建新词,python,string,replace,Python,String,Replace,我有一个三个字母的单词输入,例如car,它是起始单词。 然后,我必须创建一个新单词,每次用字母表中的每个字母替换一个字母。使用我的示例car,我想创建单词,aar,bar,car,dar,ear,…,zar。然后创建单词car、cbr、ccr、cdr、cer、…、czr。最后是caa,cab,cac,cad,cae,…,caz 我真的不知道for循环应该是什么样子。我在考虑创建某种字母表列表,通过循环创建新单词,但我不知道如何选择原始单词的哪些部分应该保留。新单词可以附加到要返回的列表中。您可以
我真的不知道for循环应该是什么样子。我在考虑创建某种字母表列表,通过循环创建新单词,但我不知道如何选择原始单词的哪些部分应该保留。新单词可以附加到要返回的列表中。您可以通过两个循环来完成此操作,即在单词上循环,然后在所有字母的范围内循环。通过为第一个循环保留索引,可以使用切片来构造新字符串:
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)
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)
您可以通过两个循环来完成此操作,即在单词上循环,然后在所有字母的范围内循环。通过为第一个循环保留索引,可以使用切片来构造新字符串:
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)
lowercase只是一个包含小写字母的字符串
我们想改变原来单词的每个字母,所以我们
迭代w的字母,但是我们主要需要字母的索引,所以我们在enumeratew上执行for循环
首先,在python中字符串是不可变的,所以我们从w。。。列表是可变的
现在是第二个小写字母的内部循环:我们相应地更改了x列表的当前元素,在更改了x之后,我们需要在下一个内部循环之前重置它,最后打印它
因为我们想要打印一个字符串而不是列表中的字符,所以我们使用空字符串的join方法将x元素粘合在一起,当然,使用空字符串
我还没有报告输出,但它正是您所要求的,请尝试
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的字母,但是我们主要需要字母的索引,所以我们在enumeratew上执行for循环
首先,在python中字符串是不可变的,所以我们从w。。。列表是可变的
现在是第二个小写字母的内部循环:我们相应地更改了x列表的当前元素,在更改了x之后,我们需要在下一个内部循环之前重置它,最后打印它
因为我们想要打印一个字符串而不是列表中的字符,所以我们使用空字符串的join方法将x元素粘合在一起,当然,使用空字符串
我还没有报告输出,但它正是您所要求的,请尝试
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:])
这可能是一种蛮力方法,尽管当您尝试使用较长的单词时,可能会出现一些性能问题 听起来你可能只想把它限制在字典里某个时候存在的单词上,这是另一整罐蠕虫 但就目前而言,对于三个字母的单词,您已经走上了正确的轨道,尽管我担心这个问题对于堆栈溢出来说可能有点过于具体 首先,如果您循环搜索单词的索引,而不是字母,您可能会获得更大的成功:
from string import lowercase
w = 'car'
for i, _ in enumerate(w):
x = list(w)
for s in lowercase:
x[i] = s
print ''.join(x)
然后,您可以使用a来获取索引前后的字母
alphabet = 'abcdefghijklmnopqrstuvwxyz'
for i in range(len(start_word)):
上面给出了另一种方法,它将字符串强制转换为列表。这是因为python将不允许简单地设置start_word[i]=letter,。这可能是一种蛮力方法,尽管当您尝试使用较长的单词时,可能会出现一些性能问题 听起来你可能只想把它限制在字典里某个时候存在的单词上,这是另一整罐蠕虫 但就目前而言,对于三个字母的单词,您已经走上了正确的轨道,尽管我担心这个问题对于堆栈溢出来说可能有点过于具体 首先,如果您循环搜索单词的索引,而不是字母,您可能会获得更大的成功:
from string import lowercase
w = 'car'
for i, _ in enumerate(w):
x = list(w)
for s in lowercase:
x[i] = s
print ''.join(x)
然后,您可以使用a来获取索引前后的字母
alphabet = 'abcdefghijklmnopqrstuvwxyz'
for i in range(len(start_word)):
上面给出了另一种方法,它将字符串强制转换为列表。这是因为python将不允许简单地将start\u word[i]=letter设置为。可能希望将string.lowercase更改为string.ascii\u lowercase可能希望将string.lowercase更改为string.ascii\u lowercase