如何将一个索引与同一列表中的上一个索引进行比较?
我想让这个程序查看列表中的每个以前的数字,并确定该数字是否大于它。如果是的话,它应该记录多大倍,并在最后返回。即计数(我使用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]))
def count(lst):
return sum(i > j for i,j in zip(lst[:-1], lst[1:]))
下面我们一起压缩列表,通过一个偏移,以获得连续配对。然后我们比较每一对。布尔值是整数,所以我们可以将它们相加以产生最终计数。
试试这个:
def count(lst):
answer = 0
for i,num in enumerate(lst[1:], 1):
answer += num < lst[i-1]
return answer
事实证明,加入布尔值整数强制bool
s到作为被处理int
S以及(True
是1
和False
是0
)。所以你可以使用它来制作更易读的代码。
希望这有助于
import numpy as np
def count(lst):
return sum(np.diff(lst)>0)
diff
给连续元素之间的差别,和返回的积极差异的数量。
从迭代工具食谱:
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
我看着这个,并首先质疑为什么'a,b = tee(可迭代)'比'a,b = iter(可迭代),iter(可迭代)'更可取?然后,我想到如果迭代是一个生成器,那么你真的没有机会在它上面创建两个迭代器。但是tee将会创建一个虚拟的第二个迭代器,而不会实际迭代两次。 – PaulMcG 2012-07-07 07:06:15
应该返回3.这将返回2 – user1487497 2012-07-07 01:30:30
+1。不知道关于布尔。 – 2012-07-07 01:30:42
@ user1487497:哦,我看到了问题。我很快扫描了你的问题,这就是为什么我错过了一些东西。看看我的编辑 – inspectorG4dget 2012-07-07 01:35:07