2015-08-25 62 views
0

我有這個片的Python代碼:迭代for循環

time = ['0115','0215','0315','0715','0815','0915','1015'] 
N_profiles_select = 582 
cldsat_timeafter = 0815 
cldsat_timebefore = 0115 

if time < cldsat_timeafter and time > cldsat_timebefore: 
    for i in range(N_profiles_select): 
     print time 

現在它打印出在第一時間(這是0215),582次,然後打印在第二時間(它是0315)582倍然後是第三次582次。

我希望它做的是打印次的順序:

0215,0315,0715, 0215,0315,0715 

這會再重複上述三個號碼582倍。我會怎麼做?

+0

Python的?時間定義在哪裏,它是什麼?你需要給我們更多的信息才能夠回答你的問題。 – petersv

+0

我加入了我的原始問題! – Kate

+0

爲什麼在這些特定的時代?爲什麼不'0415'和'0615'呢?最好的解決方案可能取決於你爲什麼要這麼做的邏輯 - 你能澄清一下嗎? – michaelrccurtis

回答

0

你是否在尋找:

for i in range(N_profiles_select): 
    for t in time: 
     if t < cldsat_timeafter and t > cldsat_timebefore: 
      print t 

(只是改變的for循環的順序)

這只是顯示的邏輯。但是,您最好確定要一次性打印哪些元素time,而不是測試N_profiles_select次。

你會做:

selectedTimes = [t in time if t < cldsat_timeafter and t > cldsat_timebefore] 
for i in range(N_profiles_select): 
    for t in selectedTimes: 
     print t 
+0

這正是我正在尋找的!謝謝!! – Kate

0

這給你所要求的:

time = ['0115','0215','0315','0415','0615','0715','0815','0915','1015'] 
N_profiles_select = 582 
cldsat_timeafter = '0815' 
cldsat_timebefore = '0115' 

for i in range(N_profiles_select): 
    for t in time: 
     if t < cldsat_timeafter and t > cldsat_timebefore: 
      print t 

打印:

0215 
0315 
0415 
0615 
0715 

N_profiles_select

PS:當設置值爲cldsat_timeaftercldsat_timebefore時,請記得使用單引號'

+0

我不這麼認爲; OP要多次打印。 –

+0

當然,然後添加另一個循環,即使我不明白爲什麼;) – petersv

+0

引用OP:「那會重複三次數字582次,我該怎麼做?」。這不是你的答案。 –

3

您可以使用itertools.chain.from_iterableitertools.repeat,以避免在列表不止一次迭代:

from itertools import chain, repeat 

time = ['0115','0215','0315','0715','0815','0915','1015'] 
N_profiles_select = 582 
cldsat_timeafter = '0815' 
cldsat_timebefore = '0115' 

filtered_elements = [x for x in time if cldsat_timebefore < x < cldsat_timeafter] 
for elem in chain.from_iterable(repeat(filtered_elements, N_profiles_select)): 
    print elem