Python для одного лайнера
У меня проблема.
Я хочу сделать свой код более простым и понятным.
Я пытаюсь получить значение следующей даты из данных
x
.
Вот мой код. Есть ли способ сделать его короче с помощью лямбда или карты?
def nextDay(date,x,time=1):
res, c = None, 0
while c<time:
temp = iter(x)
for key in temp:
if key == date:
res = next(temp, None)
date = res
c+=1
return res
x = {'2020-01-11': 3.4, '2020-01-13': 4.1, '2020-02-02': 4.1 }
print(x[nextDay('2020-01-11', x, time=1)])
Вывод:
4.1
2 ответа
Вместо того, чтобы проходить даты
time
раз и всегда только вперед на одну дату, просто найдите данную дату, а затем прочтите следующую
time
даты.
def nextDay(date, x, time=1):
it = iter(x)
date in it
for _ in range(time):
date = next(it, None)
return date
Или с itertools.islice
:
def nextDay(date, x, time=1):
it = iter(x)
date in it
return next(islice(it, time - 1, None), None)
Я действительно не думаю, что вы можете сократить код, но вы можете немного реорганизовать его, чтобы сделать его более правильным
def nextDay(date, x, time=1):
res = None
for c in range(time):
temp = iter(x)
for key in temp:
if key == date:
res = next(temp, None)
date = res
return res
На самом деле, максимум, что вы собираетесь сбрить, - это примерно 2 линии, если я не ошибаюсь.