簡體   English   中英

根據價值指數分割清單

[英]Split List based on index of value

假設我有一個日期列表:

dates =['11/09/2013','12/09/2013','20/09/2013','27/09/2013','30/09/2013']
test = '21/09/2013'

我想基於此“測試”變量拆分“日期”列表

所需的輸出:

1. ['11/09/2013','12/09/2013','20/09/2013']
2. ['27/09/2013','30/09/2013']

如果“測試”實際上屬於列表(包含),則它必須位於列表1中。

我正在嘗試一切仍然沒有運氣。

如何將項目轉換為日期時間對象?

from datetime import datetime

# convert to datetime objects
datesdt = [datetime.strptime(date, '%d/%m/%Y') for date in dates]
testdt = datetime.strptime(test, '%d/%m/%Y')

# make separate datetime object lists for low and high dates
low_date_dt_list = [dt for dt in datesdt if dt <= testdt]
high_date_dt_list = [dt for dt in datesdt if dt > testdt] 

# now print in desired format
low_date_list = [dt.strftime('%d/%m/%Y') for dt in low_date_dt_list]
high_date_list = [dt.strftime('%d/%m/%Y') for dt in high_date_dt_list]

這是將上面的代碼與給定的datestest值一起使用時我得到的輸出:

In [27]: low_date_list
Out[27]: ['11/09/2013', '12/09/2013', '20/09/2013']

In [28]: high_date_list
Out[28]: ['27/09/2013', '30/09/2013']

您應該將字符串轉換為datetime對象,然后使用日期比較拆分列表:

from datetime import datetime
dates =['11/09/2013','12/09/2013','20/09/2013','27/09/2013','30/09/2013']
test = '21/09/2013'

# Convert to datetime objects
dd = [datetime.strptime(d,'%d/%m/%Y') for d in dates]
tt = datetime.strptime(test,'%d/%m/%Y')

# Split lists
dd_before = [d for d in dd if d < tt]
dd_after = [d for d in dd if d >= tt]

# Convert back to strings if needed
dates_before = [datetime.strftime(d,'%d/%m/%Y') for d in dd_before]
dates_after = [datetime.strftime(d,'%d/%m/%Y') for d in dd_after]
dates =['11/09/2013','12/09/2013','20/09/2013','27/09/2013','30/09/2013']
test = '21/09/2013'

dates.append(test)
dates.sort()
index = dates.index(test)
print dates[:index]
print dates[index + 1:]

輸出

['11/09/2013', '12/09/2013', '20/09/2013']
['27/09/2013', '30/09/2013']

您可以獲得您想要的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM