如何将一个索引与同一列表中的上一个索引进行比较?

时间:2012-07-07 01:20:47

标签: python

我正在尝试让这个程序查看列表中的每个前一个数字,并确定该数字是否大于它。如果是,它应该记录多少倍,并在最后返回它。即计数(我使用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]) ) 

4 个答案:

答案 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被视为intTrue1False0)。因此,您可以使用它来制作更易读的代码。

希望这有帮助

答案 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