2017-06-18 24 views
1

我有一個包含大量數據的列表。如果我想設置一個if語句下面的僞代碼:Python數據[i]數據[i + 100] <#(例如50)

if data[i] to data[i+100] < 50: 
    data[i] == 1 

是否有我不需要像下面輸入一些東西什麼辦法?

data[i] <50 and data[i+1] <50 and data[i+2] <50 and .... and data[i+100] <50: 

因爲它太費時。如果有人知道更快的方式,請讓我知道。感謝!

回答

1

是。

if all(data[i+k] < 50 for k in range(0,101)): 
3

是的,你可以使用all(..)對於在切片名單

if all(x < 50 for x in data[i:i+101]): 
    data[i] = 1 # probably you want assignment? 

你必須寫i:i+101爲切片(而不是i:i+100),因爲上限是獨家

或者你可以使用range(..),節省製作列表的片段副本:

if all(data[j] < 50 for j in range(i,i+101)): 
    data[i] = 1 # probably you want assignment? 

注意,雖然你不單獨鍵入所有這些條件,當然Python的仍然將執行迭代(和評價至多 101這樣的表達)。

1

當然。您可以map這些值,檢查您的要求,然後可以使用all,以確保它們符合它:

>>> data = range(1000) 
>>> all(map(lambda i: i < 50, data[:100])) 
# => True 

要打破怎麼回事:

  • data[:101]獲得第一片陣列中的101個項目
  • map迭代這些項目並返回布爾值,如果通過我們的檢查i < 50。即。結果列表是[True, True, True, ...]
  • all然後檢查每個值爲True

然後你可以用一些聰明的切片更換項目:

if all(map(lambda i: i < 50, data[:100])): 
    data = [1] * 100 + data[100:] 
相關問題