考虑一下问题:给定一个整数数组,返回该数组递减的次数。因此,[3,2,1]减少了两次(在3和2处); [1,2,3,4,5,4,3,2,1]减少4倍(在5、4、3、2),[1]没有减少。

在任何语言的for循环中解决此问题都非常容易:

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


我只知道如何使用for或while循环并跟踪索引来解决此问题。我不知道使用map之类的方法或使用列表或理解的任何功能方式,但这就是我希望存在的方式。

最佳答案

一种很好的方法是将zip方法与sum结合使用:

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

10-05 18:15