Python学习笔记 | 四种数据集合类型list,tuple,set,dict
- 一、四种数据集合类型
-
- 1、列表list
- 2、元组tuple
- 3、集合set
- 4、字典dict
- 附:对比表
- 二、Python代码
- 三、一句话判断第几天
一、四种数据集合类型
1、列表list
- 形如:l1 = [1,3,5,7,9,11]
- 顺序:有序
- 访问方式:索引
- 每个元素类型可以不同(在使用时一般类型相同)
2、元组tuple
- 形如:t1 = (1,2,4,6,8,‘abc’)
- 修改方式:不可修改
- 访问方式:索引
- 每个元素类型可以不同(在使用时一般类型不同)
- 应用:函数有多个返回值,或数据个数固定时常使用
3、集合set
- 形如:s1 = {1,3,5}
- 顺序:无序
- 重复性:元素不可重复
- 访问方式:没有索引和位置的概念
4、字典dict
- 形如:d = {‘egg’:2.59, ‘milk’:3.19, ‘cheese’:4.80} 的 键值对。键和值一一映射,如:身份证号(键)-个人信息(值)
- 顺序:无序
- 访问方式:索引通过查找键来访问值
- 字典的一些操作: python演示:
- 字典的遍历: python演示:
附:对比表
待补
二、Python代码
下面四个代码是分别用list、tuple、set、dict写的判断输入日期是一年当中的第几天
#应用list,好处是可修改
from datetime import datetime
def is_leap_year(year):
"""
判断闰年
是:返回True
否:返回False
"""
is_leap = False
if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0):
is_leap = True
return is_leap
def main():
"""
主函数
"""
input_date_str = input('请输入日期(yyyy/mm/dd):')
input_date = datetime.strptime(input_date_str, '%Y/%m/%d')
# 打印出datetime.datetime型
print(input_date)
#拿到datetime.datetime型的日月年
year = input_date.year
month = input_date.month
day = input_date.day
#天数 = 之前月份的天数 + 当月天数
days_in_month_list = [31,28,31,30,31,30,31,31,30,31,30,31]
if is_leap_year(year):
days_in_month_list[1] = 29
days = sum(days_in_month_list[:(month - 1)]) + day
print('这是{}年的第{}天'.format(year, days))
if __name__ == '__main__':
main()
#应用tuple,不可修改
from datetime import datetime
def main():
"""
主函数
"""
input_date_str = input('请输入日期(yyyy/mm/dd):')
input_date = datetime.strptime(input_date_str, '%Y/%m/%d')
print(input_date)
year = input_date.year
month = input_date.month
day = input_date.day
#天数 = 之前月份的天数 + 当月天数
days_in_month_tup = (31,28,31,30,31,30,31,31,30,31,30,31)
days = sum(days_in_month_tup[:(month - 1)]) + day
#判断闰年,如果是,天数加1
if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0):#and先于or
if month > 2:
days += 1
print('这是第{}天'.format(days))
if __name__ == '__main__':
main()
#应用set
from datetime import datetime
def is_leap_year(year):
"""
判断闰年
是:返回True
否:返回False
"""
is_leap = False
if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0):
is_leap = True
return is_leap
def main():
"""
主函数
"""
input_date_str = input('请输入日期(yyyy/mm/dd):')
input_date = datetime.strptime(input_date_str, '%Y/%m/%d')
# 打印出datetime.datetime型
print(input_date)
#拿到datetime.datetime型的日月年
year = input_date.year
month = input_date.month
day = input_date.day
#30天和31天的月份集合
_30_days_month_set = {4,6,9,11}
_31_days_month_set = {1,3,5,7,8,10,12}
days = day
for i in range(1,month):
if i in _30_days_month_set:
days += 30
elif i in _31_days_month_set:
days += 31
else:
days += 28
if is_leap_year(year) and month > 2:
days += 1
print('这是{}年的第{}天'.format(year, days))
if __name__ == '__main__':
main()
#应用dict
from datetime import datetime
def is_leap_year(year):
"""
判断闰年
是:返回True
否:返回False
"""
is_leap = False
if (year % 400 == 0) or (year % 4 == 0) and (year % 100 != 0):
is_leap = True
return is_leap
def main():
"""
主函数
"""
input_date_str = input('请输入日期(yyyy/mm/dd):')
input_date = datetime.strptime(input_date_str, '%Y/%m/%d')
# 打印出datetime.datetime型
print(input_date)
#拿到datetime.datetime型的日月年
year = input_date.year
month = input_date.month
day = input_date.day
#月份-天数 字典
month_day_dict = {1:31,
2:28,
3:31,
4:30,
5:31,
6:30,
7:31,
8:31,
9:30,
10:31,
11:30,
12:31}
#另一种思路。创建:天数-月份 字典
day_month_dict = {30:{4,6,9,11},
31:{1,3,5,7,8,10,12}}
#初始化值
days = 0
days += day
for i in range(1,month):
days += month_day_dict[i]
if is_leap_year(year) and month > 2:
days += 1
print('这是{}年的第{}天'.format(year, days))
if __name__ == '__main__':
main()
三、一句话判断第几天
python竟然提供了一行代码,求“第几天”
https://docs.python.org/3/library/time.html#time.strftime
下面是我的做法:
思路:now的类型是datetime.datetime型。要拿到它是第几天,和拿到它的年份,月份,日份的道理是相同的。只需now.函数,即可。这里的函数就是解析函数strftime()将datetime.datetime型解析成字符串。%f表示解析成一年中第几天的形式(见上面链接网页)。
**datetime.datetime型.函数名()**的用法: