2017-12-07 3 views
0

いくつかのベクトルのスカラ和を計算する関数を書いてみたいと思います。それは引数としていくつかのリストを取るべきです。* argsを使ってリスト要素を追加する関数を書く

def add_lists(x, y, z): 
    # return sum of x, y, z 

x = add_lists([1, 2],[2, 1],[3, 1]) 
# x returns [6, 4] 

2つだけの引数のためにそれを行うのは簡単ですが、彼らが二つ以上ある場合は、私のadd_listsは[6,4]を返すようにどのように私は、*引数を使用してそれを行うことができますか?

+0

チェックこのhttps://stackoverflow.comを/ questions/919680/can-a-variable-number-of-a-function-passed-a-function –

+0

どうすればよいでしょうか? 2つの '' tuple'sの 'list'を渡すと、それを合計しますか?答えは同じです。 – ShadowRanger

+0

@NishanthShetty:他の質問では、varargsが可能ですが、OPは明らかに '* args'について知っています... – ShadowRanger

答えて

0

あなたの質問を正しく理解している場合は、任意の量のベクトルを取り、合計を返す関数を記述したいと思いますか?関数を呼び出す際に通過すべての引数を含む - リストとしてargsを扱う、基本的に

def add_lists(*args): 
    final_vector = [0, 0] 
    for vector in args: 
     final_vector[0] += vector[0] 
     final_vector[1] += vector[1] 
    return final_vector 

:[はい、あなたはそうのような*argsを使用する必要があります。

+0

これはまさに私が必要なものです!ありがとうございました! – krakowi

4

あなたはzip*argsを使用することができます。

def add_lists(*args): 
    return [sum(x) for x in zip(*args)] 

x = add_lists([1, 2],[2, 1],[3, 1]) 
# x is [6, 4] 
+1

これは最も優れた、最も一般的なソリューションです。他のソリューションとは異なり、ここではすべての「ベクトル」の長さが変更されると自動的にスケールアップされます。 – DeepSpace

+1

ここで私が好きなのは、 'zip(* args)'と 'def add_lists(* args)'は二つの異なる方法で '*'演算子を使用しているということです:最初の方法は複数の引数を渡すことができます2番目の方法は実際に 'args'を' zip'関数に展開しています – TerryA

1

ます。また、このようにそれを行うことができます。

def add_lists(*args): 
    s1 = sum(i[0] for i in args) 
    s2 = sum(i[1] for i in args) 
    return [s1,s2] 

res = add_lists([1, 2],[2, 1],[3, 1]) 
print(res) 

出力:

[6, 4] 
関連する問題