Python數據類型詳解03

一. 列表(List)

先回顧下上一篇Python數據類型詳解01文章中介紹的列表的基礎知識html

# List 列表
list1 = [12, 34, 3.14, 5.3, 'titan']
list2 = [10, 'jun']

# 1.完整列表
print(list1)

# 2.列表第一個元素
print(list1[0])

# 3.獲取第2-3個元素
print(list1[1:2])

# 4.獲取第三個到最後的全部元素
print(list1[2:])

# 5.獲取最後一個元素
print(list1[-1])

# 6.獲取倒數第二個元素
print(list1[-2])

# 7.獲取最後三個元素
print(list1[-3:-1])

# 8.合併列表
print(list1 + list2)

# 9.重複操做兩次
print(list2 * 2)
複製代碼

1.添加和刪除列表元素

對列表的數據項進行修改或更新,你也可使用append()方法來添加列表項python

list1 = []          ## 空列表
list1.append('Google')   ## 使用 append() 添加元素
list1.append('Baidu')
print(list1)

//輸出:
['Google', 'Baidu']
複製代碼

使用 del 語句來刪除列表的元素數組

del list1[1]

//輸出:
['Google']
複製代碼

2.列表腳本操做符

列表對 + 和 星號 的操做符與字符串類似。+ 號用於組合列表,星號 號用於重複列表app

# 1. 腳本操做符
list1 = [1, 2, 3]
# 元素個數
print(len(list1))
# 重複
list2 = [2] * 3
print(list2)
# 是否包含某元素
if (3 in list1):
    print('3在列表內')
else:
    print('3不在列表內')
# 遍歷列表
for x in list1 :
    print(x)
    
# 輸出結果:
3
[2, 2, 2]
3在列表內
1
2
3
複製代碼

3. 列表函數&方法

下面將會列出在列表中經常使用的函數和方法函數

函數表達式 輸出結果 描述
len(list1) 3 列表元素個數
max([1, 2, 's']) s 返回列表元素的最大值
min([1, 2, 's']) 1 返回列表元素的最小值
list(('q', 1) ['q', 1] 將元組轉換爲列表
list1.append(2) [1, 2, 3, 2] 在列表末尾添加新的對象
list1.count(2) 2 統計某個元素在列表中出現的次數
list1.index(3) 2 從列表中找出某個值第一個匹配項的索引位置
list1.insert(1, 'jun') [1, 'jun', 2, 3, 2] 將對象插入列表的指定位置
list1.remove(3) [1, 'jun', 2, 2] 移除列表中某個值的第一個匹配項
list1.reverse() [2, 2, 'jun', 1] 對列表的元素進行反向排列
list1.sort() [2, 2, 'jun', 1] 對原列表進行排序, 若是指定參數,則使用比較函數指定的比較函數

extend()方法

用於在列表末尾一次性追加另外一個序列(元組和列表)中的多個值(用新列表擴展原來的列表)spa

list3 = [12, 'as', 45]
list4 = (23, 'ed')
list3.extend(list4)
print(list3)

//輸出:
[12, 'as', 45, 23, 'ed']
複製代碼

pop()方法

用於移除列表中的一個元素(默認最後一個元素),而且返回該元素的值線程

list.pop(obj=list[-1])

//使用
list3 = [12, 'as', 45, 23, 'ed']
print(list3)
print(list3.pop())
print(list3)
print(list3.pop(2))
print(list3)

//輸出:
ed
[12, 'as', 45, 23]
45
[12, 'as', 23]
複製代碼

二. 元組

先回顧一下上篇文章介紹的元組的基礎知識code

# 元組
tuple1 = (12, 34, 3.14, 5.3, 'titan')
tuple2 = (10, 'jun')

# 1.完整元組
print(tuple1)

# 2.元組一個元素
print(tuple1[0])

# 3.獲取第2-3個元素
print(tuple1[2:3])

# 4.獲取第三個到最後的全部元素
print(tuple1[2:])

# 5.獲取最後一個元素
print(tuple1[-1])

# 6.獲取倒數第二個元素
print(tuple1[-2])

# 7.獲取最後三個元素
print(tuple1[-3:-1])

# 8.合併元組
print(tuple1 + tuple2)

# 9.重複操做兩次
print(tuple2 * 2)
複製代碼

1. 元組運算符

與列表的運算符和操做相似, 以下:orm

# 計算元素個數
print(len((1, 2, 3)))
# 合併元組
tuple1 = (1, 2) + (4, 5)
print(tuple1)
# 重複
tuple2 = ('jun',) * 3
print(tuple2)
# 檢測是否包含某元素
if (2 in tuple1):
    print('2在該元組內')
else:
    print('不在元組內')
# 遍歷元組
for x in tuple1:
    print(x)

//輸出:
3
(1, 2, 4, 5)
('jun', 'jun', 'jun')
2在該元組內
1
2
4
5
複製代碼

2. 元組內置函數

tuple1 = (1, 2, 4, 5) 
# 元組中元素最大值
print(max(tuple1))
# 元組中元素最小值
print(min(tuple1))
# 列表轉換爲元組
print(tuple(['a', 'd', 'f']))

//輸出:
5
1
('a', 'd', 'f')
複製代碼

三. 字典

先看看上文中介紹到的字典的相關基礎知識, 須要注意的是: 鍵必須不可變,因此能夠用數字,字符串或元組充當,因此用列表就不行htm

# 字典
dict1 = {'name': 'jun', 'age': 18, 'score': 90.98}
dict2 = {'name': 'titan'}

# 完整字典
print(dict2)

# 1.修改或添加字典元素
dict2['name'] = 'brother'
dict2['age'] = 20
dict2[3] = '完美'
dict2[0.9] = 0.9
print(dict2)

# 2.根據鍵值獲取value
print(dict1['score'])

# 3.獲取全部的鍵值
print(dict1.keys())

# 4.獲取全部的value值
print(dict1.values())

# 5.刪除字典元素
del dict1['name']
print(dict1)

# 6.清空字典全部條目
dict1.clear()
print(dict1)

# 7.刪除字典
dict3 = {2: 3}
del dict3
# 當該數組唄刪除以後, 在調用會報錯
# print(dict3)
複製代碼

1. 內置函數

dic1 = {'name': 'titan', 'age':20}
# 計算字典元素個數,即鍵的總數
print(len(dic1))
# 字典(Dictionary) str() 函數將值轉化爲適於人閱讀的形式,以可打印的字符串表示
print(str(dic1))
# 返回輸入的變量類型,若是變量是字典就返回字典類型
print(type(dic1))

//輸出:
2
{'name': 'titan', 'age': 20}
<class 'dict'>
複製代碼

2. 內置方法

copy()方法

  • copy()函數返回一個字典的淺複製
  • 直接賦值和 copy 的區別
dict1 =  {'user':'runoob','num':[1,2,3]}
 
dict2 = dict1          # 淺拷貝: 引用對象
dict3 = dict1.copy()   # 淺拷貝:深拷貝父對象(一級目錄),子對象(二級目錄)不拷貝,仍是引用
 
# 修改 data 數據
dict1['user']='root'
dict1['num'].remove(1)
 
# 輸出
print(dict1)
print(dict2)
print(dict3)


# 輸出結果
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'root'}
{'num': [2, 3], 'user': 'runoob'}
複製代碼

實例中 dict2 實際上是 dict1 的引用(別名),因此輸出結果都是一致的,dict3 父對象進行了深拷貝,不會隨dict1 修改而修改,子對象是淺拷貝因此隨 dict1 的修改而修改

fromkeys()方法

  • fromkeys() 函數用於建立一個新字典,
  • 參數一: 以序列seq中元素作字典的鍵
  • 參數二: value爲字典全部鍵對應的初始值(可選參數)
dict.fromkeys(seq[, value])

# 使用
dic2 = dict.fromkeys(['name', 'titan'])
print(dic2)
dic3 = dict.fromkeys(['name', 'titan'], 20)
print(dic3)

# 輸出:
{'name': None, 'titan': None}
{'name': 20, 'titan': 20}
複製代碼

get() 和 setdefault()方法

  • get() 函數返回指定鍵的值,若是值不在字典中返回默認值
  • setdefault()get() 方法相似, 若是鍵不存在於字典中,將會添加鍵並將值設爲默認值(同事也會把鍵值對添加到字典中)
  • 參數一: 字典中要查找的鍵。
  • 參數二: 若是指定鍵的值不存在時,返回該默認值值(可選參數)
dict.get(key, default=None)

# 使用
dic5 = {'name': 'titan', 'age':20}
print(dic5.get('name'))
print(dic5.get('Sex', 'man'))
print(dic5.setdefault('name'))
print(dic5.setdefault('Sex', 'man'))
print(dic5)

# 輸出結果:
titan
man
titan
man
{'name': 'titan', 'age': 20, 'Sex': 'man'}
複製代碼

update()方法

把字典的鍵/值對更新到另外一個字典裏(合併字典)

dict.update(dict2)

# 使用
dic6 = {'sex': 'new'}
dic5.update(dic6)
print(dic5)

# 輸出:
{'name': 'titan', 'age': 20, 'Sex': 'man', 'sex': 'new'}
複製代碼

pop() 和 popitem() 方法

  • pop(): 刪除字典給定鍵 key 所對應的值,返回值爲被刪除的值。key值必須給出。 不然,返回default值
  • popitem(): 隨機返回並刪除字典中的一對鍵和值。 若是字典已經爲空,卻調用了此方法,就報出KeyError異常
pop(key[,default])
popitem()

# 使用
print(dic5.pop('Sex'))
print(dic5)
print(dic5.popitem())
print(dic5)


# 輸出:
man
{'name': 'titan', 'age': 20, 'sex': 'new'}
('sex', 'new')
{'name': 'titan', 'age': 20}
複製代碼

其餘方法

dic2 = {'name': 'titan', 'age':20}
# 判斷鍵是否存在於字典中, 在True, 不在False
print(dic2.__contains__('name'))

# 以列表返回可遍歷的(鍵, 值) 元組數組
print(dic2.items())

# 刪除字典內全部元素
dic2.clear()
print(dic2)


# 輸出結果:
True
dict_items([('name', 'titan'), ('age', 20)])
{}
複製代碼

四. 日期和時間

  • Python 提供了一個 timecalendar
  • 模塊能夠用於格式化日期和時間。
  • 時間間隔是以秒爲單位的浮點小數。
  • 每一個時間戳都以自從1970年1月1日午夜(曆元)通過了多長時間來表示
  • 在介紹時間以前, 先介紹一下什麼時間元組
屬性 描述 取值
tm_year 4位數年 2018
tm_mon 1 到 12
tm_mday 1到31
tm_hour 小時 0 到 23
tm_min 分鐘 0 到 59
tm_sec 0 到 61 (60或61 是閏秒)
tm_wday 禮拜幾 0到6 (0是週一)
tm_yday 一年的第幾日 1 到 366(儒略曆)
tm_isdst 夏令時 -1, 0, 1, -1是決定是否爲夏令時的旗幟

獲取時間的簡單示例

# 日期和時間
import time

# 當前時間戳
ticks = time.time()
print(ticks)
# 本地時間
localTime = time.localtime()
print(localTime)
# 格式化時間
print(time.asctime(localTime))

# 輸出結果:
1524051644.320941
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=18, tm_hour=19, tm_min=40, tm_sec=44, tm_wday=2, tm_yday=108, tm_isdst=0)
Wed Apr 18 19:40:44 2018
複製代碼

1.格式化日期

先看幾個簡單示例

# 1.格式化日期
# 格式化成 2018-04-18 19:49:44 形式
newDate1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(newDate1)
# 格式化成 Wed Apr 18 19:50:53 2018 形式
newDate2 = time.strftime('%a %b %d %H:%M:%S %Y', time.localtime())
print(newDate2)
# 將時間字符串轉化爲時間戳
timeNum = time.mktime(time.strptime(newDate2, "%a %b %d %H:%M:%S %Y"))
print(timeNum)

# 輸出結果:
2018-04-18 19:52:21
Wed Apr 18 19:52:21 2018
1524052341.0
複製代碼
  • 這裏介紹下上面用到的相關Python中時間和日期相關的格式化符號
    • %y: 兩位數的年份表示(00-99)
    • %Y: 四位數的年份表示(000-9999)
    • %m: 月份(01-12)
    • %d: 月內中的一天(0-31)
    • %H: 24小時制小時數(0-23)
    • %I: 12小時制小時數(01-12)
    • %M: 分鐘數(00=59)
    • %S: 秒(00-59)
    • %a: 本地簡化星期名稱
    • %A: 本地完整星期名稱
    • %b: 本地簡化的月份名稱
    • %B: 本地完整的月份名稱
    • %c: 本地相應的日期表示和時間表示
    • %j: 年內的一天(001-366)
    • %p: 本地A.M.或P.M.的等價符
    • %U: 一年中的星期數(00-53)星期天爲星期的開始
    • %w: 星期(0-6),星期天爲星期的開始
    • %W: 一年中的星期數(00-53)星期一爲星期的開始
    • %x: 本地相應的日期表示
    • %X: 本地相應的時間表示
    • %Z: 當前時區的名稱
    • %%: %號自己

2. Time 模塊

Time 模塊包含了如下內置函數,既有時間處理相的,也有轉換時間格式的

Time模塊的屬性

  • timezone: 當地時區(未啓動夏令時)距離格林威治的偏移秒數(>0,美洲;<=0大部分歐洲,亞洲,非洲)
  • tzname: 包含一對根據狀況的不一樣而不一樣的字符串,分別是帶夏令時的本地時區名稱,和不帶的
print(time.timezone)
print(time.tzname)

# 輸出結果
-28800
('CST', 'CST')
複製代碼

altzone()方法

返回格林威治西部的夏令時地區的偏移秒數。若是該地區在格林威治東部會返回負值(如西歐,包括英國)。對夏令時啓用地區才能使用

print(time.altzone)

# 輸出結果:
-28800
複製代碼

asctime()方法

接受時間元組並返回一個可讀的形式爲"Tue Dec 11 18:07:14 2008"(2008年12月11日 週二18時07分14秒)的24個字符的字符串

localTime = time.localtime()
print(localTime)
# 格式化時間
print(time.asctime(localTime))

# 輸出結果:
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=18, tm_hour=19, tm_min=40, tm_sec=44, tm_wday=2, tm_yday=108, tm_isdst=0)
Wed Apr 18 19:40:44 2018
複製代碼

ctime() 和 gmtime() 和 localtime()方法

  • ctime: 把一個時間戳(按秒計算的浮點數)轉化爲time.asctime()的形式。
  • gmtime: 將一個時間戳轉換爲UTC時區(0時區)的struct_timestruct_time是在time模塊中定義的表示時間的對象)
  • localtime: 相似gmtime,做用是格式化時間戳爲本地的時間
  • 若是參數未給或者爲None的時候,將會默認time.time()爲參數
time.ctime([ sec ])
time.gmtime([ sec ])
time.localtime([ sec ])

# 使用
print(time.ctime())
print(time.ctime(time.time() - 100))
print(time.gmtime())
print(time.gmtime(time.time() - 100))
print(time.localtime())
print(time.localtime(time.time() - 100))


# 輸出結果:
Wed Apr 18 20:18:19 2018
Wed Apr 18 20:16:39 2018
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=18, tm_hour=12, tm_min=25, tm_sec=44, tm_wday=2, tm_yday=108, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=18, tm_hour=12, tm_min=24, tm_sec=4, tm_wday=2, tm_yday=108, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=19, tm_hour=9, tm_min=45, tm_sec=19, tm_wday=3, tm_yday=109, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=19, tm_hour=9, tm_min=43, tm_sec=39, tm_wday=3, tm_yday=109, tm_isdst=0)
複製代碼

gmtime()方法

  • 接收struct_time對象做爲參數,返回用秒數來表示時間的浮點數
  • 若是輸入的值不是一個合法的時間,將觸發 OverflowErrorValueError
  • 參數: 結構化的時間或者完整的9位元組元素
time.mktime(t)

# 使用
t = (2018, 4, 19, 10, 10, 20, 2, 34, 0)
print(time.mktime(t))
print(time.mktime(time.localtime()))

# 輸出結果:
1524103820.0
1524104835.0
複製代碼

sleep()方法

推遲調用線程,可經過參數secs指秒數,表示進程推遲的時間

time.sleep(t)

# 使用
print(time.ctime())
time.sleep(3)
print(time.ctime())

# 輸出結果:
Thu Apr 19 10:29:51 2018
Thu Apr 19 10:29:54 2018
複製代碼

strftime()方法

  • 接收以時間元組,並返回以可讀字符串表示的當地時間,格式由參數format決定, 上面已經簡單介紹過了
  • 參數format -- 格式字符串
  • 參數t -- 可選的參數t是一個struct_time對象
time.strftime(format[, t])

# 使用
newDate1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(newDate1)

# 輸出結果:
2018-04-19 10:35:22
複製代碼

strptime()方法

  • 函數根據指定的格式把一個時間字符串解析爲時間元組
  • 參數一: 時間字符串
  • 參數二: 格式化字符串
time.strptime(string[, format])

# 使用
structTime= time.strptime('20 Nov 2018', '%d %b %Y')
print(structTime)

# 輸出結果:
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=324, tm_isdst=-1)
複製代碼

tzset()方法

根據環境變量TZ從新初始化時間相關設置, 標準TZ環境變量格式:

std offset [dst [offset [,start[/time], end[/time]]]]
複製代碼
  • stddst: 三個或者多個時間的縮寫字母。傳遞給 time.tzname.
  • offset: 距UTC的偏移,格式: [+|-]hh[:mm[:ss]] {h=0-23, m/s=0-59}
  • start[/time], end[/time]: DST 開始生效時的日期。格式爲 m.w.d — 表明日期的月份、週數和日期。w=1 指月份中的第一週,而 w=5 指月份的最後一週。startend 能夠是如下格式之一:
    • Jn: 儒略日 n (1 <= n <= 365)。閏年日(2月29)不計算在內。
    • n: 儒略日 (0 <= n <= 365)。 閏年日(2月29)計算在內
    • Mm.n.d: 日期的月份、週數和日期。w=1 指月份中的第一週,而 w=5 指月份的最後一週。
    • time:(可選)DST 開始生效時的時間(24 小時制)。默認值爲 02:00(指定時區的本地時間)
# 沒有返回值
time.tzset()

# 使用
import time
import os

os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
time.tzset()
print time.strftime('%X %x %Z')

os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
time.tzset()
print time.strftime('%X %x %Z')

# 輸出結果爲:
13:00:40 02/17/09 EST
05:00:40 02/18/09 AEDT
複製代碼

3. 日曆(Calendar)模塊

  • 此模塊的函數都是日曆相關的,例如打印某月的字符月曆。
  • 星期一是默認的每週第一天,星期天是默認的最後一天。
  • 介紹一下Calendar模塊的相關函數
# 返回當前每週起始日期的設置, 默認狀況下,首次載入caendar模塊時返回0,即星期一
print(calendar.firstweekday())

# 是閏年返回True,不然爲false
# calendar.isleap(year)
print(calendar.isleap(2016))

# 返回在Y1,Y2兩年之間的閏年總數
# calendar.leapdays(y1,y2)
print(calendar.leapdays(2015, 2021))

# 返回一個元組, 第一個元素是該月的第一天是星期幾(0-6, 0是星期日), 第二個元素是該月有幾天
# calendar.monthcalendar(year,month)
print(calendar.monthrange(2018, 4))

# 返回給定日期是星期幾(0-6, 0是星期一)
# calendar.weekday(year,month,day)
print(calendar.weekday(2018, 4, 19))

# 設置每週的起始日期
# calendar.setfirstweekday(weekday) 無返回值
calendar.setfirstweekday(3)
print(calendar.firstweekday())


# 輸出結果:
0
True
2
(6, 30)
3
3
複製代碼

calendarprcal方法

返回一個多行字符串格式的year年年曆,3個月一行,間隔距離爲c。 每日寬度間隔爲w字符。每行長度爲21* W+18+2* Cl是每星期行數

calendar.calendar(year,w=2,l=1,c=6)
calendar.prcal(year,w=2,l=1,c=6)

//使用
year18 = calendar.calendar(2018)
print(year18)

print(calendar.prcal(2018))
複製代碼

monthprmonth方法

返回一個多行字符串格式的yearmonth月日曆,兩行標題,一週一行。每日寬度間隔爲w字符。每行的長度爲7* w+6l是每星期的行數

calendar.month(year,month,w=2,l=1)
calendar.prmonth(year,month,w=2,l=1)

//使用
monthTime = calendar.month(2018, 4)
print(monthTime)

print(calendar.prmonth(2018, 4))
複製代碼

timegm方法

time.gmtime相反:接受一個時間元組形式,返回該時刻的時間戳(1970紀元後通過的浮點秒數)

calendar.timegm(tupletime)

# 使用
print(calendar.timegm(time.localtime()))

# 輸出結果
1524150128
複製代碼

  • 到這裏, Python相關的數據類型(數字, 字符串, 元組, 列表和字典)基本都介紹完畢了
  • Python中的經常使用的時間格式和時間相關的模塊(timecalendar)也都介紹完了
  • 文章中有些地方可能也不是很全面, 會繼續努力
  • 另外, 在Python中,其餘處理日期和時間的模塊還有:datetime模塊dateutil模塊
  • 這兩個模塊這裏也再也不詳細介紹了, Python相關文章後期會持續更新......
相關文章
相關標籤/搜索