Мне было интересно, есть ли способ запустить карту на что-то. Путь карты работает, так как он выполняет итерацию и применяет функцию к каждому элементу в этом истребителе, производящем список. Есть ли способ изменить карту итеративного объекта?
Python: карта на месте
Ответ 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)