Python: Итерируя списки с разным количеством измерений, существует общий способ?
# 2x3 dimensional list
multidim_list = [
[1,2,3],
[4,5,6],
]
# 2x3x2 dimensional list
multidim_list2 = [
[
[1,2,3],
[4,5,6],
],
[
[7,8,9],
[10,11,12],
]
]
def multiply_list(list):
...
Я хотел бы реализовать функцию, которая будет умножать все элементы в списке на два. Однако моя проблема заключается в том, что списки могут иметь разные размеры.
Есть ли общий способ циклического/повторения многомерного списка и, например, умножить каждое значение на два?
EDIT1: Спасибо за быстрые ответы. В этом случае я не хочу использовать numpy. Рекурсия кажется хорошей, и даже не нужно делать копию списка, что может быть довольно большим на самом деле.
Ответы
Ответ 1
Рекурсия - ваш друг:
from collections import MutableSequence
def multiply(list_):
for index, item in enumerate(list_):
if isinstance(item, MutableSequence):
multiply(item)
else:
list_[index] *= 2
Вы можете просто сделать isinstance(item, list)
вместо isinstance(item, MutableSequence)
, но последний способ более надежный и универсальный. См. глоссарий для краткого объяснения.
Ответ 2
Вы можете использовать numpy:
import numpy as np
arr_1 = np.array(multidim_list)
arr_2 = np.array(multidim_list2)
Результат:
>>> arr_1*2
array([[ 2, 4, 6],
[ 8, 10, 12]])
>>> arr_2*2
array([[[ 2, 4, 6],
[ 8, 10, 12]],
[[14, 16, 18],
[20, 22, 24]]])
Ответ 3
numpy массивы делают это из коробки.