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)到最后一个元素。
添加回答
举报