第三章 列表元組和字典
Python的常見序列類型包括字符串、列表和元組。
python提供了len()、man()、min()全局函數來獲取元組列表或者字符串的長度、最大值和最小值。
Python還提供了序列封包和序列解包:
程序把多個值賦值給一個變量的時候,Python會自動講多個值封裝成元組。
python允許將序列(字符串、列表、元組)直接賦值給多個變量,此時序列的各元素會被依次賦值給每個變量(要求序列的元素個數個變量個數相等)
x, y, z = y, z, x
first, *middle, last = range(10)
創建列表:
- 使用中括號創建
- list()函數可以講元組、區間、字符串等對象轉換成爲列表
創建元組: - 使用()創建
- 使用tuple()函數可以將列表、區間(range)、字符串等對象轉換爲元組
增加列表元素:
- append()函數,將整個添加的元素作爲整體添加
- extend()函數,將列表、元組解包添加到原來的列表中
- insert()函數,兩個參數(位置,插入元素),在指定位置將元素整體插入
刪除列表元素:
-
del
-
remove()函數
c_list = [1,2,3,4,5,6,3]
c_list.remove(3) # 刪除第一次找到的元素
c_list.remove(20) # 找不到元素返回ValueError錯誤 -
clear()函數清空列表,[]
修改列表元素:
-
直接使用索引下標修改
-
通過slice語法對列表其中一部分賦值,在執行這個操作時並不要求新賦值的元素個數與原來的元素個數相等
b_list = list(range(0, 5))
b_list[2: 2] = [‘x’, ‘y’] #插入
b_list[2:5] = [ ] # 刪除
對列表使用slice語法賦值的時候不能使用單個值;如果使用字符串賦值,python會自動吧字符串當成序列處理,其中每個字符都是一個元素。會把字符串拆開放入
b_list[1:3] = ‘charlie’
使用slice語法賦值時,可以指定step參數。但如果指定了step參數,則要求所賦值的列表元素與所替換的列表元素個數相等。c _lsit = list(range(1,10))
c_list[2:9:2] = [‘a’,‘b’,‘c’,‘d’] # 使用step之後被複制的元素有四個,因此用於賦值的列表也必須是4個元素
其它函數:
count():統計列表中元素出現的次數
index():用於判斷某個元素在列表中出現位置
a_list.index(30, 2) # 從索引2開始,定位元素30出現的位置
a_list.index(30, 2, 4) #在索引2到4之間定位元素30出現的位置,找不到就ValueError
pop():實現出棧功能
reverse():用於將列表中元素方向存放
sort():用於列表的排序
# sort()函數還可以傳入key和reverse兩個參數,而且必須通過**關鍵字參數**傳遞。
#key用於爲每個元素生成一個比較大小的鍵;reverse參數用於執行是否需要反轉排序,默認爲False
b_list.sort(key = len, reverse = True)
# 注意和sorted()函數區別
創建字典:
-
大括號創建
-
dict()函數
dict1 = (vegetables)
dict2 = (‘語文’=99,‘數學’=98)
字典的增刪改查:
增加:直接使用索引添加
刪除:del
修改:使用索引下標修改
查詢:in
列表不允許對不存在的索引賦值,字典允許直接對不存在的key賦值
字典常用方法:
-
get()方法,通過key獲取value。使用索引獲取value值,不存在會引發KeyError;但是使用get()不存在會返回None
-
update():可以對字典進行覆蓋修改或者添加
-
items()、keys()、values():分別獲得字典的key-value、所有key、所有value。這三個方法返回的是dict_items、dict_keys、dict_values對象,Python不希望用戶直接使用這幾個方法,但是可以通過list()方法把他們轉化成列表
-
pop()方法:用於獲取指定的key對應的value,並且刪除這個key-value對。
-
popitem()方法:會隨機彈出字典的一個key-value對,類型是元組
setdefault()方法:根據key獲取value;找不到則得到設定的默認值,並且把這個默認的鍵值對加入字典cars = setdefault(‘PORSCHE’, 92) # 找到則返回對應value;找不到則返回92,並且加入字典
使用字典格式化字符串:
temp = '書名是:%(name)s, 價格是:%(price)010.2f, 出版社是:%(publish)s'
book = {'name': 'python講義', 'price': 31.2, 'publish': '人民出版社'}
print(temp % book )
第四章 流程控制
斷言:
與if有點類似,它用於對一個bool表達式進行斷言,如果爲True繼續向下執行,如果爲False程序會引發AssertionError錯誤
s_age = int(input('請輸入年齡:'))
assert 20<a_age<80
print('你輸入的年齡在20-80之間')
isinstance()函數用來判斷某個變量是否爲指定類型的實例,前一個參數爲要判斷的變量,後一個參數爲類型。
isinstance(2, int)
Python允許循環後面跟一個else代碼塊,如果循環正常完成循環會執行else代碼塊,如果break終止循環則不能執行else
count_i = 5
while count_i <5:
print(cout_i)
count += 1
else:
print('count_i大於或者等於5', count_i)
for 條件:
pass
else:
pass
for表達式
[表達式 for 循環計數器 in 可迭代對象]
for表達式最終返回的是列表,因此for表達式也成爲列表推導式
a_range = range(10)
a_list = [x*x for x in a_range if x % 2 == 0]
print(a_list)
如果將for表達式的方括號改爲圓括號,for表達式將不再生成列表,而是生成一個生成器(generator),該生成器同樣可以使用for循環迭代
a_range = range(10)
c_generator = (x*x for x in a_range if x % 2 ==0)
for i in c_generator:
print(i,end = '\t')
print()
# 迭代20次
d_list = [(x, y) for x in range(5) for y in range(4)]
print(d_list)
常用工具函數:
-
zip():可以將兩個列表壓縮成爲一個zip對象(可迭代對象)
a = ['a', 'b', 'c', 'd'] b = [1, 2, 3] [x for x in zip(a,b)]
-
reversed()函數:可以接收各種序列(元組、列表、區間等)參數,然後返回一個反序列的迭代器,該函數對參數本身並不產生影響。
# 產生一個迭代器對象需要使用循環來訪問
[x for x in reversed(range(4))] -
sorted()函數:可以接受一個可迭代對象作爲參數,返回一個對元素排列的列表;還可以傳入一個reverse反向排序,傳入key來指定排序的關鍵值。
b = ['asdf', 'ansdf', 'dqweqwr', '123', 'bdweqweqwr'] sorted(b, key = len , reverse = True)