Предположим, у нас есть список списков:
list_of_lists = [['a','b'],['x','y','z']]
Что можно считать эффективным способом присвоения значения каждому элементу?
new_list_of_lists = assign_value_to_all_elements(list_of_lists,'0')
print(new_list_of_lists)
>> [['0','0'],['0','0','0']]
Неэффективный способ, который приходит мне в голову:
def assign_value_to_all_elements(list_of_lists, new_value = '0'):
for i in range(len(list_of_lists)):
for j in range(len(list_of_lists[i])):
list_of_lists[i][j] = new_value
return list_of_lists
Мы даже не можем сделать это с массивом numpy:
import numpy as np
list_of_lists_as_np_array = np.array([['a','b'],['x','y','z']])
list_of_lists_as_np_array[:,:] = '0'
Traceback (most recent call last):
File "<ipython-input-17-90ee38fde5f2>", line 3, in <module>
list_of_lists_as_np_array[:,:] = '0'
IndexError: too many indices for array
Только когда оба списка одинаковы size, это работает:
import numpy as np
...: list_of_lists_as_np_array = np.array([['a','b'],['x','y']])
...: list_of_lists_as_np_array[:,:] = '0'
...: list_of_lists_as_np_array
Out[23]:
array([['0', '0'],
['0', '0']], dtype='<U1')
В этом примере мы работаем со списком списков (глубина 2 уровня).
Однако это можно обобщить до списка списка ... списки (n уровней в глубину).
Есть ли общий способ назначать или управлять каждым «базовым элементом» (под которым я подразумеваю type (element)! = list) в n-уровневом глубоком списке списков ?