2016-09-29 53 views
3

好吧,我確定有一個非常簡單的方法來做到這一點,但我在python生鏽,我無法解決pythonic方式來做到這一點。Python,基於應用於現有相同長度列表的條件創建新列表

我有一個列表,代表一天的時間:

import numpy as np 
hourOfDay = np.mod(range(0, 100), 24) 

然後我想創建一個新的列表,它是一個較大的值0.4,當小時是7220.2另有。

有幾個相關的文章herehere,但他們不是我想要的(他們最終得到一個較短的列表,我想要相同長度的列表)。

假設我需要使用列表理解我嘗試這樣做:

newList = [0.4 for hour in hourOfDay if hour <= 7 or hour >= 22 else 0.2] 
+1

近乎完美; 'for'在列表comp的末尾,條件先走:'newList = [0.4如果hour <= 7或hour> = 22 else 0.2 for hourOfDay]' –

+0

Thanks @AndrasDeak!慚愧我沒有自己去那裏;但至少在下次我忘記python是如何工作的時候,我會在這裏找到它。 – kabdulla

回答

1

你的列表理解是稍微偏離。此外,如果你想0.4當小時是722之間,你需要7<= hour <= 22

import numpy as np 
hourOfDay = np.mod(range(0, 100), 24) 

newList = [0.4 if 7 <= i <= 22 else 0.2 for i in hourOfDay] 

>>> newList 
[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2] 
1

可以使用面膜,但要注意,對於類型的拒絕鑄造你應該創建數據類型float第一陣列。 :

In [15]: hourOfDay = np.mod(range(0, 100), 24, dtype=np.float) 

In [16]: mask = np.logical_or(hourOfDay <= 7, hourOfDay >= 22) 

In [17]: hourOfDay[mask] = 0.4 

In [19]: hourOfDay[~mask] = 0.2 

In [20]: hourOfDay 
Out[20]: 
array([ 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 
     0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 
     0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 
     0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 
     0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 
     0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 
     0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 
     0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 
     0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 
     0.4]) 
1

一種替代方法是使用map()爲:

map(lambda x: 0.4 if 7 <= x <= 22 else 0.2, hourOfDay) 
相關問題