2017-11-03 17 views
-1

私がしようとしているのは、同じサイズの2つのリストを取り、新しいリストを返す関数を作ることです製品と一緒に。"TypeError:リストインデックスはリストではなく整数またはスライスでなければなりません" // 2つのリストパラメータを持つ関数の場合

def mult_list(x=[],y=[]): 
    z = [] 
    for i in (x,y): 
     if len(x) == len(y): 
      z.append(x[i]*y[i]) 
     else: 
      print("length of list not equal") 
    return x,y 

をしかし、私はのような何かしようとすると、私はエラーを取得しています:コードをテストするためにmult_list([8,1,4,8],[2,5,5,8])を例x = [1,2,3]y = [4,5,6]は、これは私がこれまで持っているものであるリスト[4,10,18]

を返します。それが何らかの理由で二回print文を繰り返し以来

そして、私はmult_list([8,1,8],[2,5,5,8])

のように不均等な大きさのリストをテストするとき、私は推測している私の出力に

>>> mult_list([8,1,8],[2,5,5,8]) 
length of list not equal 
length of list not equal 
([8, 1, 8], [2, 5, 5, 8]) 

を取得するには、間違っています..

+0

をあなたがI(x、y)のために 'どう思いますか:'をしているのですか?なぜあなたはループ内の長さをチェックしますか?なぜあなたは入力を返すのですか?また、https://stackoverflow.com/q/1132941/3001761 – jonrsharpe

+0

に注意してください。1)パラメータに従ってリストとして定義されていると仮定した 'x'と' y'の値を調べたと思います。 2)私は、if/else文のためにforループが必要だと思ったので、長さが等しくなければ "else"はtが等しくないことを表示します。 3)関数の終わりに(もしあれば)パラメータを返すと思った。 – zainy

+0

1.はい、 'i'がリストです。あなたは何を考えましたか? 'x [x]'は何をしますか?それは意味をなさない。 3.あなたは*できますが*(実際にはPythonを実行するためには一般的には独立しています)、おそらく最も重要なのは関数が返すようにすることではありません。私はあなたにこれを調査することをおすすめします。 http://pythontutor.com/、ここに賢明に対処するにはあまりにも多すぎることがあります。 – jonrsharpe

答えて

0

コードにはいくつか問題があります。まず、for i in (x, y)はあまり意味をなさない。これにより、iが最初にxに割り当てられ、次にyに割り当てられます。 iをインデックスとすると、for i in range(len(x))が必要です。これは、長さが等しいことを前提としています。ループの各繰り返しではなく、最初にチェックする必要があります(そのため、printが繰り返されています)。最後に、zx, yではなく)を返す必要があります。また、デフォルトのパラメータx=[], y=[]はあまり意味がありませんIMHO。

def mult_list(x, y): 
    z = [] 
    if len(x) == len(y): 
     for i in range(len(x)): 
      z.append(x[i]*y[i]) 
     return z 
    else: 
     print("length of list not equal") 

これはxyから対応する値のペアを取得するためにzip(x, y)を使用して、しかし、改善することができる - それはあなたがfor i in (x, y)と考えていたものはおそらくです。

def mult_list(x, y): 
    z = [] 
    if len(x) == len(y): 
     for xi, yi in zip(x, y): 
      z.append(xi * yi) 
     return z 
    else: 
     print("length of list not equal") 

最後に、我々は簡単なリスト内包している複数行forループを置き換えることができます。

def mult_list(x, y): 
    if len(x) == len(y): 
     return [xi * yi for xi, yi in zip(x, y)] 
    else: 
     print("length of list not equal") 
+0

私のクラスはまだzipを学習していませんが、あなたが投稿したコードの最初のブロックが意味を持ちます!ありがとうございました! – zainy

+0

@zainyさて、あなたは今それを学んだ。どういたしまして。 ;-) –

関連する問題