python - Python:如何打印范围列表的最后一个值
问题描述
我在 Python 中有这段代码:
import datetime
import re
import pymongo
from datetime import timedelta, date
def daterange(d, d1):
for n in range(int ((d1 - d).days)):
yield d + timedelta(n)
#conect to db
uri = "mongodb://127.0.0.1:27017"
client = pymongo.MongoClient(uri)
database = client['db']
collection = database['currency']
d = input('Insert beginning date (yyyy-mm-dd): ')
d1 = input('Insert end date (yyyy-mm-dd): ')
#search db
item = collection.find_one({"date" : d})
item1 = collection.find_one({"date" : d1})
datas = item['date']
datas1 = item1['date']
#convert string to object
dataObject = datetime.datetime.strptime(datas, "%Y-%m-%d")
dataObject1 = datetime.datetime.strptime(datas1, "%Y-%m-%d")
#range
mylist = []
for single_date in daterange(dataObject, dataObject1):
mylist.append(single_date.strftime("%Y-%m-%d"))
print(single_date.strftime("%Y-%m-%d"))
print(mylist)
item = collection.find_one({"date" : mylist[0]})
print(item)
如果用户插入像 2018-05-07 这样的开始日期和像 2018-05-11 这样的结束日期,它将打印:
2018-05-07
2018-05-08
2018-05-09
2018-05-10
在这种情况下,它只会打印到第 10 天,我应该如何打印结束日期(2018-05-11)?
解决方案
您的问题有很多解决方案,但是,我相信最简单的方法是调整daterange(d, d1)
功能,只需将 1 添加到range(int ((d1 - d).days))
.
def daterange(d, d1):
for n in range(int ((d1 - d).days) + 1):
yield d + timedelta(n)
这样做的原因是,根据文档,range(stop)
不输出停止值,而只输出“之前”的值。
推荐阅读
- autodesk-forge - PixelCompare 扩展配置
- ios - 将文件从一个文件夹复制和粘贴到另一个文件夹,并用随机的非重复数字重命名它们
- c# - Docker compose 按预期不适用于 Selenium CSharp
- google-apis-explorer - 尝试使用 REST API 更改 Google 云触发器时继续出错
- ansible - 如何在ansible中使用expect模块使用交互式输入
- javascript - JS 根据日期月份求和 JSON 值
- python - Python正则表达式匹配不同格式的6位数字
- c# - 控制器未返回模型中的计算属性
- mysql - Liquibase Linux:找不到数据库驱动程序:com.mysql.cj.jdbc.Driver
- android - 单 Activity 架构中的通知