web-dev-qa-db-ja.com

python関数を配列パラメーターで宣言し、配列引数を関数呼び出しに渡しますか?

私はpythonの初心者であり、引数としてリスト/配列を宣言する関数python関数に引数として配列を渡そうとしています。

私はそれを間違って宣言していると確信しています、

ここに行きます:

def dosomething(listparam):
         #do something here
dosomething(listargument)

明らかにこれは機能していませんが、何が間違っていますか?

ありがとう

21
user1020069

あなたが持っているものは正しい軌道に乗っています。

_def dosomething( thelist ):
    for element in thelist:
        print element

dosomething( ['1','2','3'] )
alist = ['red','green','blue']
dosomething( alist )  
_

出力を生成します。

_1
2
3
red
green
blue
_

上記のコメントから、注意すべき点がいくつかあります。Cファミリ言語とは異なり、インデックス自体が重要でない限り、リストを繰り返し処理しながらインデックスを追跡する必要はありません。ただし、本当にインデックスが必要な場合は、enumerate(list)ダンスを実行するのではなく、x in range(len(thelist))を使用して_index,element_ペアを取得できます。

25

配列の要素をアンパックしたいかもしれませんが、それが得られたかどうかはわかりませんが、例の下にあります:

def my_func(*args):
    for a in args:
        print a

my_func(*[1,2,3,4])
my_list = ['a','b','c']
my_func(*my_list)
14
fabiocerqueira

私はOPが本当に何を求めていたのか不明確だと思います...配列/リスト全体を渡して、関数内で操作したいですか?または、配列/リスト内のすべての値/アイテムで同じことをしたいですか?後者があなたが望むものである場合、私はうまく機能する方法を見つけました。

FortranやCなどのプログラミング言語に精通しているため、配列内の各要素を操作する要素関数を定義できます。最終的にpythonこれに相当するものを追跡し、ここで解決策を再投稿すると考えました。

def myfunc(a,b):
    if (a>b): return a
    else: return b
vecfunc = np.vectorize(myfunc)
result=vecfunc([[1,2,3],[5,6,9]],[7,4,5])
print(result)

出力:

[[7 4 5]
 [7 6 9]]
3
user4533269