Как напечатать 'nth' значение For L oop в python - PullRequest
1 голос
/ 09 марта 2020

Так что мне было интересно, есть ли способ вывести n-е значение (не последнее значение) из вывода For L oop. Например, предположим, что я хочу напечатать только значение «от пятого до последнего» или только значение «от третьего до последнего» из вывода For L oop. Есть идеи, как мне это сделать? Я новичок ie в кодировании / python, и я создаю этот код после долгих исследований и обучения в пути. Так что любая помощь приветствуется.

В настоящее время код ниже дает мне последнее значение.

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int(start_date.day), int((end_date - start_date).days), 90):
        yield start_date + timedelta(n)

start_date = date(2016, 1, 1)
end_date = date.today()
for single_date in daterange(start_date, end_date):
    x = single_date.strftime("%Y-%m-%d")

print(x)

Ответы [ 3 ]

3 голосов
/ 09 марта 2020

Метод состоит в том, чтобы накапливать результаты в контейнере, а затем печатать n-й элемент обратно.

Одна из возможностей - использовать collection.deque () со значением maxlen , установленным на n .

from datetime import timedelta, date
from collections import deque

def daterange(start_date, end_date):
    for n in range(int(start_date.day), int((end_date - start_date).days), 90):
        yield start_date + timedelta(n)

window = deque([], maxlen=5)
start_date = date(2016, 1, 1)
end_date = date.today()
for single_date in daterange(start_date, end_date):
    x = single_date.strftime("%Y-%m-%d")
    window.append(x)

print(window[0])

Приведенный выше код выводит пятую самую старую запись.

2018-12-17

Приведенный выше код накапливает самые последние значения в скользящем окне шириной 5 . Самое старое значение находится в позиции 0 , а самое новое значение находится в позиции -1 .

. Вы можете изменить 5 на любое значение из n , что вам нужно.

Надеюсь, это поможет: -)

1 голос
/ 09 марта 2020

Вы можете использовать перечисление во время цикла, которое дает счетчик итераций. Вы можете предоставить условие внутри, основываясь на значениях, которые вам нужно напечатать, следующим образом:

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int(start_date.day), int((end_date - start_date).days), 90):
        yield start_date + timedelta(n)

start_date = date(2016, 1, 1)
end_date = date.today()
n=5
length =len(list(daterange(start_date, end_date)))

for i,single_date in enumerate(daterange(start_date, end_date)):
    x = single_date.strftime("%Y-%m-%d")
    if i == length-n:
        print(x)

Надеюсь, что поможет

0 голосов
/ 09 марта 2020

Вы можете использовать нарезку, чтобы получить только определенные элементы по индексу. Однако нарезка не работает на генераторах, поэтому вам нужно привести к списку.

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int(start_date.day), int((end_date - start_date).days), 90):
       yield start_date + timedelta(n)

start_date = date(2016, 1, 1)
end_date = date.today()
for single_date in list(daterange(start_date, end_date))[4:]:
    x = single_date.strftime("%Y-%m-%d")
    print(x)

Это выведет 5-й (индекс: 4) на последний элемент.

...