2015-08-25 221 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