0

配列のすべての要素の積を len(array) - 1 で出力しようとしています。例: array = ['1','10','11']; 10 と 11 の長さは 2 であるため、10*11 となります。

次のコードを書きましたが、問題が見つからないようです (「なし」を受け取り続けます)。

import numpy
def fun(array):
    length = len(array) - 1; " find length of the array "
    for i in range(0,length+1):
        if len(array[i]) == length: 
            """find elements in array with len == length"""
            new_array = []
            new_array.append(array[i])
            "add these elements into a new array"
            for j in range(0,len(new_array)):
                return numpy.prod(int(new_array[j]))
                "find the product of these elements and return them"
            else: break
        else: break 

どんな助けでも大歓迎です。

4

4 に答える 4

2

'''まず第一に、あなたのコードはあまりpythonicではないようです.ループのために範囲をそのように使用しないで#くださいcontinue.

あなたのコードでは、最初の要素の長さが適切でない場合、コードはリターンにヒットしません。間違った値を返します。

を使用した簡単な解決策numpyは次のとおりです( @hcwhsa using のものに加えてmul):

import numpy
def fun(array):
    length = len(array) - 1;  # find length of the array
    return numpy.prod([int(x) for x in array if len(x) == length])
于 2013-11-12T18:08:37.490 に答える
2

コードには多くの問題があります。

  1. new_array = []ループ内で毎回再定義しているため、以前に追加されたアイテムは失われます。

  2. 単純な文字列の代わりに整数を追加する必要があります。

  3. numpy.prod配列全体に適用でき、2 番目のループは必要ありません。

  4. 内側のループが適切にインデントされていません。

  5. これは間違っていませんが、Python では、インデックスを使用する代わりに、配列/リスト自体の項目を反復処理できます。

作業バージョン:

import numpy
def fun(array):
    length = len(array) - 1; " find length of the array "
    new_array = []
    #iterate over the list itself.
    for item in array:
        if len(item) == length: 
            new_array.append(int(item))
    return numpy.prod(new_array)

print fun(['1','10','11'])    

純粋な python バージョン:

>>> from operator import mul
>>> arr =  ['1','10','11']
>>> reduce(mul, (int(x) for x in arr if len(x) == len(arr)-1))
110
于 2013-11-12T18:02:52.987 に答える
2

あなたの最初の問題は、Python では、明示的な戻り値のない関数が None を返すことです。コードに return がありますが、コード パスが return ステートメントに達していないため、None が返されます (詳細については、次の問題を参照してください)。たとえば、次のbad_abs関数は の場合に None を返しa > 0ます。すべてのコード パスに return ステートメントがあることを確認することで、これを修正できます。

def bad_abs(a):
    if a < 0:
        return -a

def good_abs(a):
    if a < 0:
        a = -a
    return a

次に、if ステートメントの else 句と内部 for ループの else 句に break ステートメントがあります。これは、break ステートメントを正しく使用する方法の例です。

def any(array):
    return_value = False
    for item in array:
        if item == True:
            return_value = True
            break # Exit the loop and go to return
    return return_value

実際、配列内の最初の長さ以外の項目の後でブレークすると、コードが関数の最後に到達して None を返します。どちらのelse句も必要ないように見えるので、削除してください。

最後に、空のリストを作成しています。つまり[]、ループの反復ごとに、前の反復で見つかった値を削除しています。そのため、必ずループの外で new_array を作成する必要があります (より適切な名前を付けてください)。

def filter_product(array):
    filtered_array = []
    length = len(array) - 1
    for item in array:
        if len(item) == length:
            filtered_array.append(int(item))
    return numpy.prod(filtered_array)

これは 1 行のリストの理解に減らすことができますが、1 つのライナーはプログラミングの学習には特に役に立たないことがわかりました。

于 2013-11-12T18:02:58.127 に答える
0
numbers = ['1','10','11']
product = 1
for n in numbers:
    if len(n) == 2:
        product *= int(n)
print product
于 2013-11-12T19:56:21.003 に答える