查找列表中数字后跟较大数字的次数
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)
我有这个函数来查找列表中一个数字后跟一个较大数字的次数。还有其他 "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)