目录
日期和时间
datetime模块
date日期类,time时间类,datetime日期时间类
定义date(年,月,日)
data之间的减法
定义时间(时,分,秒)
定义datetime(年,月,日,时,分,秒)
计算日期
计算时间差
例题-lanqiao 611
例题-lanqiao 2096
math库
heapq库
itertools库
日期和时间
datetime模块
from datetime import datetime, timedelta 这行代码是 Python 中的导入语句,用于从 datetime 模块中导入特定的类或函数。
datetime 类:datetime 类是 Python 中处理日期和时间的基本类之一。它允许创建表示特定日期和时间的对象,以及执行各种与日期和时间相关的操作,如格式化、比较、计算等。
timedelta 类:timedelta 类用于表示时间间隔,即两个日期或时间之间的差异。它可以表示以天、小时、分钟、秒等单位的时间差。timedelta 类通常与 datetime 类一起使用,用于在日期和时间上执行加法或减法运算。
date日期类,time时间类,datetime日期时间类
定义date(年,月,日)
import datetime
a=datetime.date(2024,3,10)
print(type(a))
print(a)
#<class 'datetime.date'>
#2024-03-10
data之间的减法
import datetime
a=datetime.date(2024,3,10)
b=datetime.date(2024,3,12)
print(type(b-a))
print(b-a)
#<class 'datetime.timedelta'>
#2 days, 0:00:00
定义时间(时,分,秒)
import datetime
a=datetime.time(5,59,59)
print(type(a))
print(a)
#<class 'datetime.time'>
#05:59:59
定义datetime(年,月,日,时,分,秒)
import datetime
a=datetime.datetime(2024,3,31,20,30,50)
print(a.date())
print(a.time())
print(a)
#2024-03-31
#20:30:50
#2024-03-31 20:30:50
计算日期
import datetime
a=datetime.datetime(2024,3,31,20,30,50)
delta = datetime.timedelta(days=100)
b=a+delta #计算100天后的日期
print(b)
b=a-delta #计算100天前的日期
print(b)
#2024-07-09 20:30:50
#2023-12-22 20:30:50
计算时间差
import datetime
a=datetime.datetime(2024,3,31,20,55,51)
b=datetime.datetime(2022,10,5,20,30,50)
delta=a-b
print(delta) #计算时间差
print(delta.days) #输出时间差的天数
print(delta.seconds) #输出秒数
print(delta.total_seconds())#统一转换成秒
#543 days, 0:25:01
#543
#1501
#46916701.0
例题-lanqiao 611
计算从1901年1月1日到2000年12月31日存在多少个星期1
#利用date数据类型的weekday方法判断是否为周一
#利用timedelta不断增加1天
解析:
首先,导入datetime模块,然后定义两个日期对象start和end,分别表示起始日期和结束日期。接着,定义一个变量ans用于存储结果。
接下来,使用while循环遍历从start到end的每一天。在循环内部,使用weekday()方法判断当前日期是否为周一(weekday()返回值为0表示周一),如果是,则将ans加1。然后,使用timedelta对象将start日期加1天,继续下一次循环。
最后,循环结束后,打印ans的值,即1901年1月1日至2000年12月31日期间,每周一的总数。
import datetime
start=datetime.date(1901,1,1)
end=datetime.date(2000,12,31)
ans=0
while start <= end:
if start.weekday()==0:
ans+=1
start+=datetime.timedelta(days=1)
print(ans)
例题-lanqiao 2096
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等
顺子日期指的就是在日期的yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
例如20220123 就是一个顺子日期,因为它出现了一个顺子:123;而20221023 则不是一个顺子日期,它一个顺子也没有。
小明想知道在整个2022年份中,一共有多少个顺子日期
分析:
首先,导入datetime模块,然后定义两个日期对象start和end,分别表示起始日期和结束日期。接着,定义一个列表m,包含了需要查找的数字序列。再定义一个变量ans用于存储结果。
接下来,使用while循环遍历从start到end的每一天。在循环内部,使用strftime()方法将当前日期转换为字符串格式,并赋值给now_date。然后,使用for循环遍历列表m中的每个元素x,判断x是否在now_date中。如果存在,则将ans加1,并跳出当前循环。最后,将start日期加1天,继续下一次循环。
最后,循环结束后,打印ans的值,即2022年1月1日至2022年12月31日期间,日期中包含数字序列'012'、'123'、'234'、'345'、'456'、'567'、'678'或'789'的天数。
import datetime
start=datetime.date(2022,1,1)
end=datetime.date(2022,12,31)
m=['012','123','234','345','456','567','678','789']
ans=0
while start <= end:
now_date=start.strftime("%Y%m%d")
for x in m:
if x in now_date:
ans+=1
break
start+=datetime.timedelta(days=1)
print(ans)
math库
heapq库
Python的heapq模块提供了堆数据结构的实现,堆是一种特殊的树形数据结构,每个父节点的值都小于或等于其子节点的值。这个模块提供了一些函数,如heappush、heappop等,可以用来操作堆。
常规使用示例:
import heapq
# 创建一个空堆
heap = []
# 向堆中添加元素
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
heapq.heappush(heap, 2)
# 输出堆中的元素
print(heap)
# 输出:[1, 2, 5, 3]
# 从堆中弹出最小元素
min_element = heapq.heappop(heap)
print(min_element)
# 输出:1
# 从堆中弹出最小元素并添加元素7
heapq.heapreplace(heap,7)
# 输出堆中的元素
print(heap)
# 输出:[3, 7, 5]
itertools库
Python的itertools模块提供了许多用于创建有效循环迭代器的函数,这些迭代器可以用于处理数据流、生成组合和排列等。这个模块有很多有用的函数,如cycle、permutations、combinations(循环,排列,组合)等。
import itertools
# 创建一个无限循环的迭代器
counter = itertools.count(start=1, step=2)
print(next(counter))
print(next(counter))
print(next(counter))
# 输出:1 3 5
# 创建一个循环迭代器
cycler = itertools.cycle('AB')
print(next(cycler))
print(next(cycler))
print(next(cycler))
print(next(cycler))
# 输出:A B A B
# 生成一个列表的所有排列
permutations = list(itertools.permutations([1, 2, 3]))
print(permutations)
# 输出:[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
# 生成一个列表的所有组合
combinations = list(itertools.combinations([1, 2, 3], 2))
print(combinations)
# 输出:[(1, 2), (1, 3), (2, 3)]
#以上内容仅为本人知识归纳