2013-11-15 186 views
-1

僅供參考,我是新來的這塞入功能能過濾intergers

所以原來的問題是

7)寫一個函數filter_range(V,羅喜),其採用整數列表v和返回一個新的列表,只包含

這些元素在v範圍內[lo,hi]。

所以我遇到了這個問題,如果用戶輸入整數和範圍條件,它將如何單獨檢查該列表中的所有項目,還是必須對每個輸入項進行測試。這是一個if語句嗎?如果是這樣會如何工作? 「如果< = STR(等等等等)< B,則打印的東西?但是,這將如何打印每個個體數通?老實說,剛剛失去了在一般情況下,洛爾

+5

顯然功課(只是說)。你爲什麼不試試__something__併發布它。我們很樂意從那裏引導你 – inspectorG4dget

+0

這樣想 - 如果我給你一副紙牌,並要求你給我所有的數字從5到9,你會怎麼做?你可能會看看每張卡片,決定它是否適合該範圍,並將其移動到一個新堆。當你看完所有的牌後,你會把新的牌給我 - 現在試着用代碼來做到這一點。 – mgilson

+0

從來沒有說過這不是:) – user2994734

回答

2

您可以在一個單一的線使用爲此列表內涵這樣

def filter_range(v, lo, hi): 
    return [item for item in v if lo <= item < hi] 

print filter_range(range(10), 2, 8) 

輸出

[2, 3, 4, 5, 6, 7] 
+0

我相信記號[lo,high]表示lo是要包括,但嗨不是。 – mgilson

+0

@mgilson Yup。這就是範圍的工作原理。更新:)謝謝 – thefourtheye

+1

我喜歡這些很酷的解決方案,即使他把它給老師,她也會知道他受騙了:) – aIKid

0
def filter_range(v, lo, hi): 
    return list(filter(lambda x: lo<=x<hi, v)) 

def filter_range(v, lo, hi): 
    acceptable = set(range(lo, hi)) 
    return list(filter(acceptable.__contains__, v)) 

OR

def filter_range(v, lo, hi): 
    answer = [] 
    for i in v: 
    if lo <= i < hi: 
     answer.append(i) 
    return answer 

OR

def filter_range(v, lo, hi): 
    answer = [] 
    for i in v: 
    if i >= lo: 
     if i < hi: 
     answer.append(i) 
    return answer 
+0

我相信'[lo,high]'表示'lo'被包括在內,但是「嗨」不是。 – mgilson

+0

@mgilson:很好!固定。感謝您的錯誤報告 – inspectorG4dget

+0

但是,用戶如何輸入hi和lo,我試圖在if語句之前插入一個輸入問題,但一直說意想不到的塊 – user2994734

0

在Python3這是相當有效的(實際上並沒有創建一個列表,然後掃描)使用。

def filter_range(v, lo, hi): 
    return [i for i in v if i in range(lo, hi)] 

在Python2你應該使用的xrange代替range