Непонятно, почему вы хотите использовать map()
здесь. Если вы мутируете games
, достаточно простого for
-loop.
map()
больше подходит для создания нового list
(и даже тогда предпочтительным будет понимание списка).
Я также думаю, что dict
является более аккуратным способом определения отображения, поскольку его меньше беспокоит. Это может быть включено в ваш класс Game
.
Вот пример:
#!/usr/bin/env python
class Game(object):
clam_to_new_var = {
4: 0,
5: 1,
}
def __init__(self, clam):
self.clam = clam
@property
def new_var(self):
return Game.clam_to_new_var.get(self.clam, None)
def __str__(self):
return 'Game with clam "{}" has new_var "{}"'.format(
self.clam,
self.new_var,
)
if __name__ == '__main__':
games = map(Game, xrange(10))
for g in games:
print g
Пример вывода:
Game with clam "0" has new_var "None"
Game with clam "1" has new_var "None"
Game with clam "2" has new_var "None"
Game with clam "3" has new_var "None"
Game with clam "4" has new_var "0"
Game with clam "5" has new_var "1"
Game with clam "6" has new_var "None"
Game with clam "7" has new_var "None"
Game with clam "8" has new_var "None"
Game with clam "9" has new_var "None"
Я оставил map()
в этом примере, но в производстве код, я предпочел бы:
games = [Game(clam) for clam in range(10)]
Почему? См. The fate of reduce()
in Python 3000.
Вы редактируете структуру данных, когда вы перебираете ее. Это не очень хорошая идея. –
@EricUrban Пока элементы не добавляются и не удаляются, редактирование списка должно быть прекрасным. – korylprince
Эрик Я не понимаю вашу точку зрения. ЕСЛИ я делаю это в цикле for, я все еще повторяю его и редактирую. Что мне не хватает? – appleLover