2012-11-04 45 views
0

我想使用try語句或任何其他方法來查找列表中給定變量之後的最近項目:我有以下代碼。在這個例子中,我希望代碼繼續向d1添加一天,直到找到列表pj中的第一個datetime對象,然後返回該對應列表元素的索引。因此,這裏d1應該等於datetime.datetime(1922,01,06)和d1_index = 1。範圍函數產生列表中的最後一個元素,所以很顯然,我需要更改該條件,但不知道正確的前進方向是什麼, 感謝堆,Python:繼續嘗試循環,直到找到列表中的第一項爲止

凱恩

import datetime 
import numpy as np 
import dateutil.relativedelta as rd 


pj = [datetime.datetime(1921,12,31), datetime.datetime(1922,01,06), datetime.datetime(1922,01,07), datetime.datetime(1922,01,10), datetime.datetime(1922,01,12)] 

d1 = datetime.datetime(1922,01,02) 
d2 = datetime.datetime(1929,12,31) 

for i in range(0,50): 
    try: 
     d1_index = pj.index(d1) 

    except ValueError: 
     d1 = d1 +rd.relativedelta(days = +i) 

     continue 
    break 

回答

1

善無。

>>> bisect.bisect_left(pj, d1) 
1 
>>> pj[bisect.bisect_left(pj, d1)] 
datetime.datetime(1922, 1, 6, 0, 0) 
+0

你是一個怪異的傳說@Ignacio。歡呼:) – tripkane

+0

嘿@Ignacio巴斯克斯 - 艾布拉姆斯。如果我想要前面的索引號/值怎麼辦? – tripkane

+0

然後減1。 –

相關問題