2016-06-12 12 views
1

問題を考える:整数の配列を与え、配列が減少している回数を返す。だから[3,2,1]は2回(3と2で)減少しています。 [1,2,3,4,5,4,3,2,1]は4回(5,4,3,2で)減少し、[1]は減少していない。一度に2つの隣接する変数を使用して配列をループする関数型プログラミング方法またはほとんどのPythonic方法

これは、任意の言語でのforループでこれを解決するために非常に簡単です:

int result = 0; 
for (int i = 0; i < array.length - 1; i++) { 
    if (array[i] > array[i+1]) result += 1; 
} 

私はこれだけのためにまたはwhileループを使用して、インデックスの追跡を解決する方法を知っています。私はmapのような方法を使って機能的な方法を知らないか、リストや内包物を使っていますが、それは私が望むものです。

+0

" - あなたが探しているものが分からない。もう何も残っていません。 –

+0

@KarolyHorvath申し訳ありませんが、私の文法はあいまいでした。それは明らかになった。 – djechlin

答えて

6

sumと組み合わせてzip方法を使用しているこれを行う1つの良い方法:

sum(a > b for a, b in zip(array, array[1:])) 
0

Pythonの配列が機能を削減している場合、私は知らないが、彼らが持っている場合は、あなたが何かをすることができることjavacriptでこれはこのように行われます:

let result = 0; 
[1,2,3,4,5,4,3,2,1].reduce((prev,current) => { 
    if (prev > current){ 
     result = result + 1;; 
    } 
    return current; 
}); 

console.log(result); // 4 for the given array 
0

ここでは再帰関数です。

def decreasing(xs): 
    if len(xs) < 2: 
     return 0 
    (x0, x1, *xss) = xs 
    if x0 > x1: 
     return 1 + decreasing([x1] + xss) 
    return decreasing([x1] + xss) 

私はこのように複数のリストを作成することはよくありませんが、これはpythonで健康です。 "forループまたはwhileループを使用せずに、または索引を追跡したり、マップ、フィルタ、または内包表記のような機能的なツールボックスのメソッドを使用しなくても、"

関連する問題