0

リストの最初のインデックスから始まり、連続した順序でのみ下降する単調減少サブシーケンスの最後のインデックスを見つけられるようにしたいと考えています。たとえば、次のようなリストがあるとします。

x = [89, 88, 88, 88, 88, 87, 88]5サブシーケンスの最後の要素のインデックスであるため、返せるようにしたいと考えています[89, 88, 88, 88, 88, 87]。ここで、このサブシーケンスの各数値は単調減少し89、リストの最初のインデックスである から連続して減少します。

たとえば、次のようなリストがあったとしますx = [89, 87, 87, 86, 87]0最初のインデックス (89) で始まり、連続して単調減少する (つまり、リストの次の数値は最初の数値から 2 ずつ減少する) 唯一の数値であるため、を返したいと思います。または、次のようなリストがある場合: 、リストの最初のインデックスから単調減少するシーケンスの唯一の部分であるため、x = [89, 90, 89, 88]戻りたいと思います。0

説明が難しくてすみません。助けてくれてありがとう!

4

4 に答える 4

0

質問を完全に理解できたかどうかはわかりませんが、これを見てください。

def findseries(a):
    for i in xrange(len(a) - 1):
        if a[i+1] - a[i] not in [-1, 0]:
            return i
    return len(a) - 1

基本的にリストを反復処理します。チェックする次の要素が現在の要素より正確に1 小さいか、または等しい場合、現在の要素がシリーズの最後の要素になることがわかります。

それ以外の場合は、次の要素に進みます。

一致しない要素を見つけることなくリスト全体の反復を終了した場合、リストの最後の要素がシリーズの最後の要素であると言うことができるので、最後の要素len(a) - 1のインデックスを返します。

于 2016-08-02T14:13:59.330 に答える
0

Python ジェネレータ式を使用できます。

x = [89, 88, 88, 88, 88, 87, 88]
g = (i for i,(v,u) in enumerate(zip(x,x[1:])) if not (u+1==v or u==v))
next(g)
#output:
5
于 2016-08-02T14:30:15.833 に答える