查找列表中数字后跟较大数字的次数

Find number of times a number is followed by a larger number in a list

我有这个函数来查找列表中一个数字后跟一个较大数字的次数。还有其他 "pythonic" 方法可以做到这一点吗?我正在使用 Python 3.7.0.

提前致谢。

def find_greater_numbers(arr):
    count = 0
    i = 0
    j = 1
    while i < len(arr):
        while j < len(arr):
            if arr[j] > arr[i]:
                count += 1
            j+=1
        j = i+1
        i+=1
    return count

find_greater_numbers([6,1,2,7]]) # returns 4

有点不清楚你的意思是立即关注,还是在任何以后的索引处关注

在第一种情况下,这个班轮:

sum(x < y for x,y in zip(arr[:-1],arr[1:])) # answer is 2

第二个,这个:

sum(any(x < y for y in arr[i:]) for i,x in enumerate(arr)) # answer is 3

如果你想计算确切的此类对的数量(就像你的实际代码似乎在做的那样):

sum(x < y for i,x in enumerate(arr) for y in arr[i:]) # answer is 4

根据条件 if x < y,使用 map 为列表中的每一对数字获取 True/False 的列表。该列表是使用 for 循环生成的。得到列表后,过滤列表中'True'的个数。然后使用 itertools.chain.from_iterable() 函数创建一个列表并找到它的长度。

import itertools

arr = [6, 1, 2, 7]
num = len(list(itertools.chain.from_iterable(list(filter(lambda x: x , map(lambda x, y: x<y, arr[:-i], arr[i:]))) for i, x in enumerate(arr))))
print(num)