2016-12-26 2 views
0

Я хочу сделать все элементы трехмерного массива равными нулю без вызова трех циклов.python: сделать все трехмерные значения элементов списка до нуля

list= [[[1,2],[3,4,11]],[[5,6,12,13],[7,8,14]]] 

в

list= [[[0,0],[0,0,0]],[[0,0,0,0],[0,0,0]]] 

Я не хочу называть 3 для петель сделать индивидуальное задание. Есть ли одна функция для выполнения этой операции.

+0

Похоже, вы фактически ответили на свой вопрос. – DeepSpace

ответ

1

В чистом питоне вам нужно петли. Но если вы можете использовать другие числовые библиотеки можно использовать numpy:

In [13]: arr = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) 

In [15]: arr = np.zeros(arr.shape) 

In [16]: arr 
Out[16]: 
array([[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]]) 

Как @ Blckknght упоминается в комментариях, если вы хотите изменить детали в месте лучше использовать простое назначение среза, вместо того чтобы создавать новые массив с помощью np.zeros():

In [4]: arr[:] = 0 

In [5]: arr 
Out[5]: 
array([[[0, 0], 
     [0, 0]], 

     [[0, 0], 
     [0, 0]]]) 
+0

Этот вопрос * конкретно о списках *. –

+1

Обратите внимание: если вы можете использовать numpy и хотите, чтобы массив был изменен на месте (вместо создания нового массива и замены оригинала на нем), вам просто нужно назначить срез: 'arr [:] = 0'. Вы также можете индексировать с помощью '...' (литерал для непонятного одноэлементного кода Python «Ellipsis»), если вы предпочитаете быть явным, что вы хотите транслировать по всем измерениям, а не только по первой ('arr [...] = 0'). – Blckknght

+1

@ juanpa.arrivillaga: Я бы сказал, что «использовать numpy» часто является наиболее правильным ответом, когда кто-то спрашивает, как сделать некоторую операцию сразу для вложенной числовой структуры данных. Он может быть или не применим здесь, в зависимости от того, имеют ли реальные данные опроса непревзойденные длины списков в некоторых измерениях или нет. – Blckknght

1

вы можете использовать списковые:

[[[0 for k in m] for m in l] for l in lst] 
+1

Я переименовал 'list' в' lst', поскольку один из родных типов Python уже называется этим именем. –

+0

Перечень списков - синтаксический сахар для цикла – abukaj