给出一个字符串,我想创建一个函数,该函数将给定字符串中每个字母在字符串中的位置。
例如,extend('cat')应该产生'caattt'。
仅允许我使用抽象列表函数:list()
,map()
,filter()
和lambda
(也允许递归,但不允许任何形式的循环)
下面的代码是我尝试过的,我试图提取每个字母以及位置并使用它们。也许我不了解map和lambda的工作原理,但这是我的方法。
def extend(s):
index = range(1, len(s) - 1)
return list(map(lambda k: k*(lambda x: x, index), s))
答案 0 :(得分:2)
您可以使用一个可选参数来跟踪当前递归调用的字符串的第一个字符的乘数:
def extend(s, count=1):
return s and s[0] * count + extend(s[1:], count + 1)
使extend('cat')
返回:'caattt'
答案 1 :(得分:1)
您可以将给定的字符串和range
对象映射到1
上,并将字符串的长度映射到lambda
函数,该函数返回以给定计数重复的给定字符:>
def extend(s):
return ''.join(map(lambda char, count: char * count, s, range(1, len(s) + 1)))
使extend('cat')
返回:'caattt'
答案 2 :(得分:0)
这可能不符合您的限制:
"".join([x*(i+1) for i,x in enumerate(s)])
答案 3 :(得分:0)
使用for
省略的另一种可能的解决方案是使用字符串的index
属性:
def extend(s):
l = lambda x: x*(s.index(x) + 1)
return "".join(map(l, list(s)))
针对:
extend('cat`)
此输出
caattt