1

私はこのプログラムにリスト内の以前の各数値を調べさせ、その数値がそれよりも大きいかどうかを判断しようとしています。そうである場合は、何倍大きいかを記録し、最後に返す必要があります。つまり、カウント(変数としてnumを使用しています)は0から始まります。ただし、10は7より大きいため、numは1になります。7は20より大きくないため、カウントは同じままです。ただし、20は15より大きいため、カウント(num)は2であり、15は4より大きい(カウントは3)。これで、4は6より大きくなく(カウントは変更されません)、次の数値がないため、6は次の数値より大きくなりません。これは私が今持っているものです。インデックスを参照するためにlst[i]とlst[i+ 1]を使用する必要があると思いますか?誰かが私にこれを教えてもらえますか?ありがとう。

def count(lst):
num = 0 
some sort of division here? then add to num variable?

#main prog
( count([10, 7, 20, 15, 4, 6]) ) 
4

4 に答える 4

2
import numpy as np
def count(lst):
    return sum(np.diff(lst)>0)

diffは連続する要素間の差を返し、合計は正の差の数を返します。

于 2012-07-07T01:29:15.027 に答える
1
def count(lst):
    return sum(i > j for i,j in zip(lst[:-1], lst[1:]))

ここでは、連続するペアを取得するために、リストを 1 つずらして圧縮します。次に、各ペアを比較します。ブール値は整数であるため、それらを合計して最終的なカウントを生成できます。

于 2012-07-07T01:22:53.747 に答える
1

これを試して:

def count(lst):
    answer = 0
    for i,num in enumerate(lst[1:], 1):
        answer += num < lst[i-1]
    return answer

ブール値を整数に追加すると、 s も s としてbool扱われるようになりintます ( Trueis1およびFalseis 0)。したがって、それを使用して、より読みやすいコードを作成できます。

お役に立てれば

于 2012-07-07T01:27:37.690 に答える
0

itertools レシピから:

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

def count(lst):
    return sum(a>b for a,b in pairwise(lst))

それから

count([10, 7, 20, 15, 4, 6])  # => 3
于 2012-07-07T02:49:15.047 に答える