10
# 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を掛ける一般的な方法はありますか?

編集1:速い答えをありがとう。この場合、numpyは使いたくありません。再帰は良さそうですし、リストのコピーを作成する必要すらありません。これは実際にはかなり大きくなる可能性があります。

4

3 に答える 3

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)が、後者の方法の方が将来性が高く、一般的です。簡単な説明については、用語集を参照してください。

于 2012-04-22T20:54:15.703 に答える
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]]])
于 2012-04-22T20:54:26.837 に答える
3

numpy配列は、箱から出してそれを行います。

于 2012-04-22T20:54:20.483 に答える