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