我有兩個列表列表,一個列表包含兩個日期和一個ID號,另一個列表包含許多信息,包括一個ID號和一個日期。我需要找出這個日期是否在每個ID號的另外兩個日期之間,如果是,請將它寫入一個新列表。更簡單地說,對於每個ID號碼,如果日期在另外兩個日期之間,則將信息寫入新列表。目前,所有名單都被列入新名單,這是錯誤的(並不是所有的日期都在其他兩次之間)。確保for循環的每次迭代中只有一個列表從嵌套列表中使用
mv = [['05/13/2012', '09:54:27', 'U', '#0F', '0006E3DADA', 'T', 'Un\n', 'F3', '13 05 12'],
['05/13/2012', '09:54:28', 'U', '#0F', '0006E3DADA', 'T', 'Un\n', 'F3', '13 05 12'],
etc]
對於MV是在我感興趣的列表中的最後日期。
datepairs = [['21 05 01', '04 06 01', 'C1'],
['27 07 06', '10 08 06', 'C1'],
etc]
這些都是從MV的日期必須在兩者之間的日期。
visitsbetweendates=[]
for visit in mv:
for date in datepairs1:
if date[2]==visit[7]: #if the id number is the same in both lists
if date[0]<= visit[8] <= date[1]: #if the visit date is between the datepair dates
if visit not in visitsbetweendates: #if the list is unique
visitsbetweendates.append(visit)
break
我想可能發生的是,迄今[2],日期[0]和日期[1]是不是都來自同一個列表,每次進來datepairs循環運行,或者事情錯了與身份證號碼。 對不起,如果這不是特別清楚。謝謝你的幫助!
編輯: 這是我如何將日期轉換爲日期時間對象,這是在上面的代碼之前完成的。
from datetime import datetime
for v in mv:
e=datetime.strptime(visit[0],'%m/%d/%Y')
s=e.strftime('%d %m %y')
visit.append(s)
datepairs1=[]
for date in datepairs:
d=datetime.strptime(str(date[0]),' %d %b %y')
f=datetime.strptime(str(date[1]),' %d %B %Y')
e=d.strftime('%d %m %y')
g=f.strftime('%d %m %y')
gah=[e,g,date[2].strip(' ')]
datepairs1.append(gah)
比較「MM/DD/YYYY」日期,字母是一個非常糟糕的主意。首先將其轉換爲'datetime'對象,或者至少將其重構爲'YYYYMMDD'。 – eumiro 2012-07-17 14:45:25
在腳本的前面,我將所有日期轉換爲datetime對象,以DD MM YY格式獲取它們,以便它們更易於比較。這有幫助嗎? :/ – Snaaa 2012-07-17 14:51:35
轉換在哪裏?您將日期顯示爲會影響解決方案的字符串。 – RobB 2012-07-17 14:52:42