Python:迭代具有不同维度的列表,是否有通用的方法?

时间:2012-04-22 20:48:25

标签: python arrays list loops multidimensional-array

# 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。   递归似乎很好,它甚至不需要复制列表,实际上可能非常大。

3 个答案:

答案 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数组开箱即用。