Python 使用lambda编写一个mutate函数

Python 使用lambda编写一个mutate函数,python,lambda,Python,Lambda,我需要编写一个名为“mutate to”的函数来计算由给定单词的单个变异生成的所有单词。 突变定义为插入字符、删除字符、替换字符或交换字符串中的两个连续字符。为简单起见,只考虑字母Z</p> 例如: words = mutate("hello") 'helo' in words True 'cello' in words True 'helol' in words True 这是我迄今为止一直努力做到的代码: letters = ['a','b','c','d','e','f','g','h'

我需要编写一个名为“mutate to”的函数来计算由给定单词的单个变异生成的所有单词。 突变定义为插入字符、删除字符、替换字符或交换字符串中的两个连续字符。为简单起见,只考虑字母Z</p> 例如:

words = mutate("hello")
'helo' in words
True
'cello' in words
True
'helol' in words
True
这是我迄今为止一直努力做到的代码:

letters = ['a','b','c','d','e','f','g','h','i','j','k','m','l','n','o','p','q','r','s','t' ,'u','v','w','x','y','z']
mutate = lambda x: [''.join([x[:i], l, x[i+1:len(x)]])
                    for i in range(len(x)) 
                    for l in letters]

我怎样才能同时放入一行,删除一个字符,并交换一个字符串中的两个连续字符?

这是否算作使用
lambda

import string

def f1(word):
    return set(word[:i] + c + word[i:] for i in range(len(word) + 1) for c in string.ascii_lowercase)

def f2(word):
    return set((word[:i] + word[i + 1:]) for i in range(len(word)))

def f3(word):
    return set((word[:i] + c + word[i + 1:] for i in range(len(word)) for c in string.ascii_lowercase))

def f4(word):
    return set((word[:i] + word[i + 1] + word[i] + word[i + 2:]) for i in range(len(word) - 1))

mutate = lambda word: set(f1(word) | f2(word) | f3(word) | f4(word))

这为四种情况中的每种情况定义了一个函数,然后将
mutate
定义为这些情况下生成的所有可能单词的集合。

为什么需要一行?如果它在多行上,每种情况一行,我会将它定义为一个对象以节省一些内存,这样读起来会更好。如果您尝试列举所有可能性,您的需求可能会使ram爆炸。本练习集中于lambda的功能,即要求在lambda函数中的一行中完成所有操作更具可读性:
从字符串导入ascii\u小写
字母=列表(ascii\u小写)
您能提供一个链接吗?fp并不意味着从上到下的一行。谢谢你的努力,但不幸的是,我不认为这一行有任何困难,尽管这是一条大的行,我怎么能放在这一行呢?(即使很大)微不足道:
mutate=lambda word:set(word[:i]+c+word[i:]表示范围内的i(len(word)+1表示字符串中的c。ascii_小写)。union(set((word[:i]+word[i+1:])union(set((word[:i]+c+word[i:]表示范围内的i(len(word)),表示字符串中的c。ascii_小写))。union(set)((word[:i]+word[i]+word[i]+word[i+2:])表示范围内的i(len(word)-1)))