2016-11-02 19 views
1

私はPythonプログラミング言語を使い慣れていません。現在、製品のPython関数をリストに書くのに苦労しています。リスト内の要素の製品機能

aList = [1,2,3,4,5]とすると、リスト内の項目の積を返すためにpython関数 "product"を記述する必要があります。例えば、製品(aList [1:3])は24を返します。

私は研究しましたが、これまでには分かりませんでした。ここに私が思い付いたものがありますが、それは間違っています。

def product(l): 
    p = 1 
    for i in range(0, len(l)): 
     p = p*i 
    return p 

print(product(aList[1:3]) 

どのように私は希望の出力を得ることができるでしょうか?また、私はPythonには比較的新しいので、numpyなどの組み込み関数を使用することはお勧めしません。

+1

あなたはインデックスを掛けているので、インデックスではなくリストの要素を掛ける必要があります。 –

+3

'aList [1:3]'は '[2,3]'なので、製品は6です。 – brianpck

答えて

2

値を掛け合わせたい場合はインデックスを使用しないでください。何らかの理由で、あなたはインデックスを反復処理する必要がある、場合だけだけではなく、インデックス、特にあなた以来自体(」よりも、指定されたインデックスのリスト項目を使用していることを確認し、直接

def product(l): 
    p = 1 
    for i in l: 
     p = p*i 
    return p 

print(product(aList[1:3])) 

リストを反復処理しますoperator.mulで使用reduce

+0

'p = p * i'以上のスペースを忘れないでください。' p * = i' – brianpck

+0

ほとんどの場合、反復処理中にインデックスを取得するために 'for i、v in enumerate(l)'を使いたいと思うでしょう。 – chepner

+0

@brianpck特定の問題を除いてコードを変更しないでください。 – StephenTG

1

(また、あなたの印刷中に括弧が欠落していることに注意してください)0で開始し、あなたがインデックスで行く場合は、最後に0を得る)

def product(l): 
    p = 1 
    for i in range(0, len(l)): 
     p = p*l[i] 
    return p 

print(product(aList[1:3])) 

でしょう:

>>> import functools 
>>> import operator 
>>> functools.reduce(operator.mul, [1, 2, 3, 4, 5]) 
120 

のpython 2では、あなたは(それが内蔵された)functoolsを含めずにreduceを使用することができます。

operator.mullambda x,y: x*yに置き換えることもできます。

1

あなたはPythonの2

aList = [1,2,3,4,5], 
print reduce(lambda x,y:x*y, aList) 

出力

120 
+0

'reduce'はOPが使用していると思われるPython3用の組み込みではないことに注意してください。 – brianpck

0

製品を得るために、リスト内の各要素の上にあなたができるだけのループを使用している場合は、これを達成するためのpython reduce機能を使用することができます。このように:

def get_product_of_list(some_list): 
    product = 1 

    for number in some_list: 
     product = product * number 

    return product 

希望します。

関連する問題