2016-06-12 24 views
1

考慮問題:給定一個整數數組,返回數組遞減的次數。所以[3,2,1]減少兩次(在3和2); [1,2,3,4,5,4,3,2,1]減少4倍(在5,4,3,2),[1]減少無。函數式編程方法或大多數Pythonic方式一次使用兩個相鄰變量遍歷數組

這是非常方便的在任何語言來解決這個for循環:

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

我只知道如何使用for或while循環和跟蹤指數的解決這個問題。我不知道使用像map這樣的方法或使用列表或解析的方法,但這正是我希望存在的。

+0

「不使用for或while循環,或者跟蹤索引,或使用功能工具箱方法(如地圖或過濾器或理解)。 - 我不知道你在找什麼。沒有別的了。 –

+0

@ KarolyHorvath對不起,我的語法不明確。這是澄清。 – djechlin

回答

6

這樣的組合使用的zipsum的一個很好的方式:

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

我不知道蟒蛇陣列具有降低作用,但如果他們有,你可以做一些事情,在JavaScript將這樣做:

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中創建像這樣的多個列表是否健康。

相關問題