varunl jest obecnie akceptowane odpowiedź
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
działa dobrze dla typów niereferencyjnych jak liczb. Niestety, jeśli chcesz utworzyć listę-list, natkniesz się na błędy odniesień. Przykład w Pythonie 2.7.6:
>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>>
Jak widać, każdy element wskazuje ten sam obiekt listy. Aby obejść ten problem, można utworzyć metodę, która zainicjuje każdą pozycję do odwołania do innego obiektu.
def init_list_of_objects(size):
list_of_objects = list()
for i in range(0,size):
list_of_objects.append(list()) #different object reference each time
return list_of_objects
>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>>
Jest prawdopodobne, domyślny, wbudowany pyton sposób to zrobić (zamiast pisać funkcję), ale nie jestem pewien, co to jest. Byłbym szczęśliwy, gdyby został poprawiony!
Edit: To [ [] for _ in range(10)]
Przykład:
>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]
dlaczego trzeba utworzyć pustą listę? –
możliwy duplikat [Inicjowanie listy do znanej liczby elementów w Pythonie] (http://stackoverflow.com/questions/521674/initializing-a-list-to-a-known-number-ofements-in- python) – lumbric
"Pusta lista" ('[]') z definicji ma zero elementów. To, czego najwyraźniej chcesz, to lista wartości fałszujących, takich jak 'None',' 0' lub ''''. – dan04