我正在尝试让这个程序查看列表中的每个前一个数字,并确定该数字是否大于它。如果是,它应该记录多少倍,并在最后返回它。即计数(我使用num作为变量)从0开始。但是10大于7因此num变为1.现在7不大于20所以计数保持不变。但是20大于15,所以count(num)是2.而15大于4(count是3)。现在4不大于6(计数不变),6不大于下一个数字,因为没有下一个数字。这就是我现在拥有的。我想lst [i]和lst [i + 1]需要用来引用索引吗?谁能跟我走过这个?感谢。
def count(lst):
num = 0
some sort of division here? then add to num variable?
#main prog
( count([10, 7, 20, 15, 4, 6]) )
答案 0 :(得分:2)
import numpy as np
def count(lst):
return sum(np.diff(lst)>0)
diff
给出连续元素之间的差异,总和返回正差异的数量。
答案 1 :(得分:1)
def count(lst):
return sum(i > j for i,j in zip(lst[:-1], lst[1:]))
这里我们将列表一起压缩,偏移一,以获得连续的对。然后我们比较每一对。布尔是整数,所以我们可以将它们相加以产生最终计数。
答案 2 :(得分:1)
试试这个:
def count(lst):
answer = 0
for i,num in enumerate(lst[1:], 1):
answer += num < lst[i-1]
return answer
事实证明,向整数添加布尔值会强制bool
被视为int
,True
为1
和False
是0
)。因此,您可以使用它来制作更易读的代码。
希望这有帮助
答案 3 :(得分:0)
来自itertools食谱:
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
def count(lst):
return sum(a>b for a,b in pairwise(lst))
然后
count([10, 7, 20, 15, 4, 6]) # => 3