Как создать список из 150 дел, инициализированных с помощью dict в Python? - PullRequest
0 голосов
/ 12 октября 2009

Я хотел бы создать такой список

list = []

for i in range(150):
    list.append({'open': False, 'serve': False})

Но есть ли лучший способ сделать это в Python?

Ответы [ 3 ]

5 голосов
/ 12 октября 2009

С пониманием списка (не используйте list в качестве имени переменной, поскольку оно скрывает встроенный Python):

# use range() in Python 3
l = [{'open': False, 'serve': False} for i in xrange(150)]
1 голос
/ 16 ноября 2009

Что бы вы ни делали, не пытайтесь list = [{'open': False, 'serve': False}] * 150, так как у вас будет один и тот же словарь 150 раз. : D

Тогда вы получите забавное поведение, как

>>> list[0]['open'] = True
>>> list[1]['open'] = False
>>> print list[0]['open']
False

>>> list[0] is list[1]
True

Как отметил gs, в python 2.6 вы можете использовать namedtuple, что проще для памяти:

from collections import namedtuple
Socket = namedtuple('Socket', 'open serve')
sockets = [Socket(False,False) for i in range(150)]
0 голосов
/ 12 октября 2009

Понимание списка для построения вашей структуры данных, вероятно, немного более эффективно. Это также намного более кратко. Иногда краткость - это хорошая вещь, а иногда она просто затеняет происходящее. В этом случае я думаю, что listcomp довольно понятен.

Но listcomp и цикл for в конечном итоге создают для вас одно и то же, так что это действительно тот случай, когда нет «лучшего» ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...