Умножьте каждую букву в строке на ее позицию в строке (начиная с 1), используя только абстрактные функции списка - PullRequest
1 голос
/ 13 октября 2019

Учитывая строку, я хочу создать функцию, которая будет умножать каждую букву в строке, учитывая ее позицию в строке.

Так, например, exten ('cat') должен производить 'caattt'.

Мне разрешено использовать только функции абстрактного списка: list(), map(), filter() и lambda (рекурсия также разрешена, но без циклов).

Код ниже - это то, что я пробовал, я пытаюсь извлечь каждую букву, а также позицию и работать с ними. Возможно, я не понимаю, как работают карта и лямбда, но это мой подход.

def extend(s):
  index = range(1, len(s) - 1)
  return list(map(lambda k: k*(lambda x: x, index), s))

Ответы [ 4 ]

2 голосов
/ 13 октября 2019

Вы можете использовать необязательный параметр для отслеживания множителя первого символа строки для текущего рекурсивного вызова:

def extend(s, count=1):
    return s and s[0] * count + extend(s[1:], count + 1)

, так что extend('cat') возвращает: 'caattt'

1 голос
/ 13 октября 2019

Вы можете отобразить данную строку и объект range через 1 и длину строки в функцию lambda, которая возвращает заданный символ, повторенный с указанным счетом:

def extend(s):
    return ''.join(map(lambda char, count: char * count, s, range(1, len(s) + 1)))

так что extend('cat') возвращает: 'caattt'

0 голосов
/ 13 октября 2019

Другое возможное решение, которое не использует for, заключается в использовании index свойства строки:

def extend(s):
    l = lambda x: x*(s.index(x) + 1)
    return "".join(map(l, list(s)))

Для:

extend('cat`)

Это выводит

caattt
0 голосов
/ 13 октября 2019

Это может не соответствовать вашим ограничениям:

"".join([x*(i+1) for i,x in enumerate(s)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...