Попарное перемножение элементов списка

Рейтинг: 0Ответов: 2Опубликовано: 05.03.2023

Как перемножить парные элементы в списке?

Например, есть список:

list1 = ['1','1000','2','1500','1.32','1100']

На выходе нужно получить список:

list1 = ['1000','3000','1452']

Нужна функция которая преобразует так список. Возможно через лямдбу как-то?

Ответы

▲ 3Принят

Самое простое решение - сделать как-то так:

list1 = [x * y for x, y in zip(list1[::2], list1[1::2])]

Функция zip() группирует последовательные элементы списка, после чего мы их преобразовываем в новый список при помощи генератора списков (list comprehenshions), с элементами, получаемыми перемножением чисел в каждой паре.

Но, так как у вас в списке находятся не числа, а строки, их еще предварительно нужно преобразовать в числовой тип, для чисел с плавающей точкой используется тип float.

list1 = ['1','1000','2','1500','1.32','1100']
list1 = [x * y for x, y in zip(*[map(float, list1)] * 2)]
print(list1)

Получаем результат:

[1000.0, 3000.0, 1452.0]

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

Также, обратите внимание, что если в исходном списке будет содержаться значение, которое нельзя сконвертировать в число, то будет выведена ошибка, этот метод рабочий если вам заранее достоверно известно, что список состоит только из чисел.

▲ 0

Про старый добрый range никто не вспомнил ))

list1 = ['1', '1000', '2', '1500', '1.32', '1100']

list1 = [float(list1[i]) * float(list1[i + 1]) for i in range(0, len(list1), 2)]
print(list1)

Результат:

[1000.0, 3000.0, 1452.0]