Как вернуть список при использовании lambda
Получается, если применяю list() при печати. Как сделать так, чтобы функция возвращала list?
STR = 'Happy Birthday to you'
song = lambda x: map(lambda i: STR if i[0] != 2 else STR[:-6] + 'dear ' + i[1], enumerate([x, x, x, x]))
print(list(song('Iris')))
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
STR = 'Happy Birthday to you'
song = lambda x: list(map(lambda i: STR if i[0] != 2 else STR[:-6] + 'dear ' + i[1], enumerate([x, x, x, x])))
print(song('Iris'))
Автор решения: Zhihar
→ Ссылка
как вариант:
STR = 'Happy Birthday to you'
song = lambda x: [*map(lambda i: STR if i[0] != 2 else STR[:-6] + 'dear ' + i[1], enumerate([x, x, x, x]))]
print(song('Iris'))
вот так чуть покороче будет:
STR = 'Happy Birthday to you'
song = lambda x: [*map(lambda i: STR if i != 2 else f"{STR[:-7]} dear {x}", range(4))]
print(song('Iris'))
немного более хитрый вариант, чтобы ничего в строке не отрезать:
STR = 'Happy Birthday %'
song = lambda x: [*map(lambda i: STR.replace("%", "to you" if i != 2 else f"dear {x}"), range(4))]
print(song('Iris'))
и покороче вариант
STR = 'Happy Birthday '
song = lambda x: [*map(lambda i: STR + ("to you" if i != 2 else f"dear {x}"), range(4))]
print(song('Iris'))
Еще немного компактности - экономим на if:
song = lambda x: [*map(lambda i: STR if i else f"{STR[:-7]} dear {x}", range(-2, 2))]
song = lambda x: [*map(lambda i: STR.replace("%", "to you" if i else f"dear {x}"), range(-2, 2))]
song = lambda x: [*map(lambda i: STR + ("to you" if i else f"dear {x}"), range(-2, 2))]
Чуть другой подход без if вообще и пока самый компактный вариант :) :
STR = 'Happy Birthday '
song = lambda x: [STR + [f'dear {x}', 'to you'][bool(i)] for i in range(-2,2)]
И новый рекордсмен по длине кода:
STR = 'Happy Birthday '
song = lambda x: [STR + [f'dear {x}', 'to you'][int(i)] for i in "1101"]