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型.函數名()**的用法: