Учитывая список целых чисел и список индексов, как я могу использовать карту, чтобы добавить 10 к указанным c элементам в первом списке? - PullRequest
1 голос
/ 01 февраля 2020

Я хочу отобразить функцию только для указания c элементов в списке; это будут элементы индексов, существующих в списке индексов. Я перепробовал много вещей, похожих на то, что я написал ниже. Я пытаюсь добиться этого без использования classi c for-l oop. * edit: под "classi c for-l oop" я имею в виду использование range (что-то вроде: for i in range (len (list)))

lista = [123, 456, 1, 0, -2, 13, 15, 29, 47, 48]
index_list = [0, 1, 2, 3]
lista = list( map( lambda x: x + 10 if #some condition here I could not figure out#
\ else x for x in list ) ) 
print(lista) 
#expected output: [133, 466, 11, 10, -2, 13, 15, 29, 47, 48]

Я также попытался определить мой собственная функция, а затем ее отображение, но безрезультатно. Как я могу это сделать?

1 Ответ

1 голос
/ 01 февраля 2020

Предполагая, что вы не хотите использовать прямое решение путем итерации списка индексов:

Проблема в том, что одна из переменных, от которых вы зависите (индекс), не включена в Ваш звонок на map. Вам нужно будет вставить это в вызов карты каким-либо образом, например, с помощью enumerate - который выдаст кортеж (idx, value) для каждого элемента в вашем списке.

nums = [123, 456, 1, 0, -2, 13, 15, 29, 47, 48]
indices = [0, 1, 2, 3]

result = list(
    map(
        lambda x: x[1] + 10 if x[0] in indices else x[1],
        enumerate(nums)
    )
)

print(result)

Имейте в виду, что часть if x[0] in indices будет искать список индексов линейно и выполнит всю операцию O(n * m). Это можно оптимизировать, используя вместо этого набор (в котором в качестве общего случая используется поиск O (1)) или словарь.

> [133, 466, 11, 10, -2, 13, 15, 29, 47, 48]
...