给定一个字符串,我想创建一个函数,将给定字符串中的每个字母在字符串中的位置相乘。例如,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))
4 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
您可以使用可选参数来跟踪当前递归调用的字符串第一个字符的乘数:
def extend(s, count=1): return s and s[0] * count + extend(s[1:], count + 1)
这样extend('cat')
返回:'caattt'
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
您可以将给定的字符串和一个range
对象1
以及字符串的长度映射到一个lambda
函数,该函数返回给定字符重复给定计数:
def extend(s): return ''.join(map(lambda char, count: char * count, s, range(1, len(s) + 1)))
这样extend('cat')
返回:'caattt'
月关宝盒
TA贡献1772条经验 获得超5个赞
省略使用的另一种可能的解决方案for
是使用index
字符串的属性:
def extend(s): l = lambda x: x*(s.index(x) + 1) return "".join(map(l, list(s)))
为了:
extend('cat`)
这输出
caattt
添加回答
举报
0/150
提交
取消