2016-06-12 22 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中创建像这样的多个列表是否健康。

相关问题