1

我试图让这个程序查看列表中的每个先前的数字,并确定该数字是否大于它。如果是,它应该记录大多少倍,并在最后返回。即计数(我使用 num 作为变量)从 0 开始。但是 10 大于 7,因此 num 变为 1。现在 7 不大于 20,因此计数保持不变。但 20 大于 15,所以计数(num)为 2。而 15 大于 4(计数为 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

4 回答 4

2
import numpy as np
def count(lst):
    return sum(np.diff(lst)>0)

diff给出连续元素之间的差异,总和返回正差异的数量.

于 2012-07-07T01:29:15.027 回答
1

尝试这个:

def count(lst):
    answer = 0
    for i,num in enumerate(lst[1:], 1):
        answer += num < lst[i-1]
    return answer

事实证明,将布尔值添加到整数会强制将bools 也视为ints(Trueis1Falseis 0)。因此,您可以使用它来制作更具可读性的代码。

希望这可以帮助

于 2012-07-07T01:27:37.690 回答
1
def count(lst):
    return sum(i > j for i,j in zip(lst[:-1], lst[1:]))

在这里,我们将列表压缩在一起,偏移一个,以获得连续的对。然后我们比较每一对。布尔值是整数,因此我们可以将它们相加以产生最终计数。

于 2012-07-07T01:22:53.747 回答
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
于 2012-07-07T02:49:15.047 回答