Python

Работа со списками Python. В одну строку.

Не получается решить в одну строчку используя lambda функции или другие

floats: list[float] = [12.3554, 4.02, 5.777, 2.12, 3.13, 4.44, 11.0001]

names: list[str] = ["Vanes", "Alen", "Jana", "William", "Richards", "Joy"]

numbers: list[int] = [22, 33, 10, 6894, 11, 2, 1]



Напишите код, который создаёт три новых списка. Вот их содержимое:

1)Каждое число из списка floats возводится в третью степень и округляется до трёх знаков после запятой.
2)Из списка names берутся только те имена, в которых есть хотя бы пять букв.
3)Берётся произведение всех чисел из списка numbers.
Alex Alexeev
Alex Alexeev
210
не, ну, понятно, что map, filter и reduce, но можно и без них
и в первых двух случаях, через list comprehension, имхо, получится даже симпатичнее:

floats = [12.3554, 4.02, 5.777, 2.12, 3.13, 4.44, 11.0001]
floats1 = [round(x**3, 3) for x in floats]
print(floats)

names = ["Vanes", "Alen", "Jana", "William", "Richards", "Joy"]
names1 = [x for x in names if len(x) >= 5]
print(names1)

numbers = [22, 33, 10, 6894, 11, 2, 1]
numbers1 = 0 if numbers == [] else (lambda F, L : F(F, L))(lambda F, L : L[0] * (1 if len(L)==1 else F(F, L[1:])), numbers)
print(numbers1)
ГИ
Григорий Иголкин
85 271
Лучший ответ
1)
print(list(map(lambda x: float('{:.3f}'.format(x ** 3)),[12.3554, 4.02, 5.777, 2.12, 3.13, 4.44, 11.0001])))
>>>
[1886.125, 64.965, 192.8, 9.528, 30.664, 87.528, 1331.036]
2)
print(list(filter(lambda x: len(set(x)) >= 5, ["Vanes", "Alen", "Jana", "William", "Richards", "Joy"])))
>>>
['Vanes', 'William', 'Richards']
3)
Произведение в одну строчку не сделать, ибо нужно для начала импортировать reduce
Минимум две строчки получится
from functools import reduce
print(reduce(lambda prev, el: prev * el, [22, 33, 10, 6894, 11, 2, 1]))
>>>
1101109680
Сергей Олексюк
Сергей Олексюк
81 177
Владимир Бурцев касательно 3. Ну как же не сделать ))))
numbers_new = functools.reduce(lambda x, y: x * y, [22, 33, 10, 6894, 11, 2, 1])
floats = [12.3554, 4.02, 5.777, 2.12, 3.13, 4.44, 11.0001]
print(list(map(lambda x: round(x ** 3, 3), floats)))
Станислав Панов Для третьего могу такое придумать, но не знаю считается ли это.
a = [22, 33, 10, 6894, 11, 2, 1]
v = lambda x: a[x] * (v(x - 1) if x - 1 >= 0 else 1)
print(list(map(v, range(len(a)))))
Нафиг питон, учи лучше первоисточник - С++.
Эдик Топчий нафиг С++, учи лучше первоисточник- физику на уровне атомов
from typing import List
import functools


floats: List[float] = [12.3554, 4.02, 5.777, 2.12, 3.13, 4.44, 11.0001]
names: List[str] = ["Vanes", "Alen", "Jana", "William", "Richards", "Joy"]
numbers: List[int] = [22, 33, 10, 6894, 11, 2, 1]

print(list(map(lambda x: float('{:.3f}'.format(x ** 3)), floats)))
print(list(filter(lambda x: len(set(x)) >= 5, names)))
print(functools.reduce(lambda x, y: x * y, numbers))