# 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):
...
我想实现一个函数,它将列表中的所有元素乘以2。但是我的问题是列表可以有不同的维度。
是否存在循环/迭代多维列表的一般方法,例如将每个值乘以2?
EDIT1: 谢谢你的快速答案。 对于这种情况,我不想使用numpy。 递归似乎很好,它甚至不需要复制列表,实际上可能非常大。
答案 0 :(得分:15)
递归是你的朋友:
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)
,但后一种方式更具有前瞻性和通用性。有关简短说明,请参阅the glossary。
答案 1 :(得分:8)
你可以使用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]]])
答案 2 :(得分:3)
numpy数组开箱即用。