2015-12-16 2 views
0

Предполагая, что у меня есть список дат:Split Список на основе индекса стоимости

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.

Я пытаюсь everyth до сих пор не повезло.

+6

превратить их все в объекты datetime, сортировать/фильтровать их? – dwanderson

+1

вы пробовали ** все **, что вы пробовали? – taesu

ответ

0

Вы должны преобразовать строки в объект даты и времени, а затем разделить список, используя сравнение дат:

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] 
0

Как насчет преобразования объектов в объекты datetime?

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] 

Вот что я получаю для вывода при использовании приведенного выше кода с вашими данными dates и test значений:

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'] 
0
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'] 

Вы можете получить желаемый результат.

+1

Сортировка дат в формате дня/месяца/года лексикографически опасна. Он работал только здесь, потому что все мотыльки и годы были одинаковыми .. – DSM

Смежные вопросы