2012-07-07 60 views
1

我想讓這個程序查看列表中的每個以前的數字,並確定該數字是否大於它。如果是的話,它應該記錄多大倍,並在最後返回。即計數(我使用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])) 

回答

1
def count(lst): 
    return sum(i > j for i,j in zip(lst[:-1], lst[1:])) 

下面我們一起壓縮列表,通過一個偏移,以獲得連續配對。然後我們比較每一對。布爾值是整數,所以我們可以將它們相加以產生最終計數。

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以及(True1False0)。所以你可以使用它來製作更易讀的代碼。

希望這有助於

+0

應該返回3.這將返回2 – user1487497 2012-07-07 01:30:30

+0

+1。不知道關於布爾。 – 2012-07-07 01:30:42

+0

@ user1487497:哦,我看到了問題。我很快掃描了你的問題,這就是爲什麼我錯過了一些東西。看看我的編輯 – inspectorG4dget 2012-07-07 01:35:07

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

diff給連續元素之間的差別,和返回的積極差異的數量。

0

從迭代工具食譜:

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 
+0

我看着這個,並首先質疑爲什麼'a,b = tee(可迭代)'比'a,b = iter(可迭代),iter(可迭代)'更可取?然後,我想到如果迭代是一個生成器,那麼你真的沒有機會在它上面創建兩個迭代器。但是tee將會創建一個虛擬的第二個迭代器,而不會實際迭代兩次。 – PaulMcG 2012-07-07 07:06:15

相關問題