3 回答

TA貢獻1798條經驗 獲得超7個贊
該技術是將結果累積到容器中,然后將第 n 個元素打印回來。
一種可能性是使用 maxlen 值設置為 n 的 collections.deque()。
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 的任何值。
希望這有幫助:-)

TA貢獻1788條經驗 獲得超4個贊
可以在循環時使用枚舉,從而提供迭代計數。您可以根據需要打印的值在內部提供條件,如下所示:
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)

TA貢獻1844條經驗 獲得超8個贊
可以使用切片僅按索引獲取某些元素。但是,切片不適用于生成器,因此您需要將其轉換為列表。
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)到最后一個元素。
添加回答
舉報