Подтвердить что ты не робот

Python: карта на месте

Мне было интересно, есть ли способ запустить карту на что-то. Путь карты работает, так как он выполняет итерацию и применяет функцию к каждому элементу в этом истребителе, производящем список. Есть ли способ изменить карту итеративного объекта?

4b9b3361

Ответ 1

Назначение среза часто нормально, если вам нужно изменить список на месте

mylist[:] = map(func, mylist)

Ответ 2

Достаточно просто написать:

def inmap(f, x):
    for i, v in enumerate(x):
            x[i] = f(v)

a = range(10)
inmap(lambda x: x**2, a)
print a

Ответ 3

Вы можете использовать понимание лямбда (или def) или лучшего списка (если оно достаточно):

[ do_things_on_iterable for item in iterable ]

В любом случае вы можете захотеть быть более явным с циклом for, если вещи становятся слишком сложными.

Например, вы можете сделать что-то вроде этого, но imho это уродливо:

[ mylist.__setitem__(i,thing) for i,thing in enumerate(mylist) ]

Ответ 4

Просто напишите очевидный код, чтобы сделать это.

for i, item in enumerate(sequence):
    sequence[i] = f(item)