3.3.3列表的嵌套
一個列表中的元素又是一個鏈表,這就是列表的嵌套
3.3.4列表推導式
列表推導式(列表生成式):用一個表達式創建一個有規律的列表或控制一個有規律的列表
例子:
(1)# 需求列表 0 -20
# list1 = list(range(0, 21))
# print(list1)
# while 準備一個空列表,(i<21)然後range生成等差數列 把數字追加到空列表
# list2 = []
# i = 0
# while i<21:
# list2.append(i)
# i += 1
# print(list2)
# list3 = []
# for i in range(0, 21):
# list3.append(i)
# print(list3)
# list4 = [i for i in range(0, 21)]
# print(list4)
(2)# 取0-20之間的偶數
# list5 = []
# for i in range(0, 21, 2):
# list5.append(i)
# print(list5)
# list6 = []
# for i in range(0,21):
# if i % 2 == 0:
# list6.append(i)
# print(list6)
# list7 = [i for i in range(0,21, 2)]
# print(list7)
# list8 = [i for i in range(0, 21) if i % 2 == 0]
# print(list8)
# 生成10 個 666 列表
# list9 = ['aaa' for _ in range(10)]
# 因爲返回的數據和i沒有任何關係,所以把i替換成 _
# print(list9)
#mylist = ['daqiu', 10,'erqiu', 20, 'qiu', 'sanqiu']
# 循環遍歷迭代:要字符長度>=3
# len(str(i))
#list10 = [i for i in mylist if len(str(i)) >= 3]
#print(list10)
3.3.5列表常用技巧
(1)合併列表
①方法一:+
list3 = list1 + list2
②方法二:+=
list1 += list2
③方法三:extend
list1.extend(list2)
(2)字符串與列表間的互轉
①字符串轉列表
字符串名.split(“分割符號”)
注意:當split的小括號裏面什麼都不寫的時候,只要是空格或者\t都會被去掉
②列表轉字符串☆☆☆
"分割符號".join(列表名)
注意:當有混合類型時,用列表推導式:
# list4 = [1, 2, 3, 'abc', 'bcd']
# list5 = [str(i) for i in list4]
# print(list5)
# str5 = '_'.join(list5)
# print(str5)
(3)判斷某個數據是不是某個數據類型☆☆☆
isinstance(數據,類型)
(4)enumerate☆☆☆
返回一個列表,列表裏面包含的是下標和數據對應的元組。利用enumerate拆包,數據更加可控
例子:
mylist = ['aa', 'bb', 'cc']
for i in enumerate(mylist):
print(i)
print(list(enumerate(mylist)))
# print(id(mylist)) # id() 查看任何一個數據的內存地址
for key,value in enumerate(mylist):
print(key)
print(value)
3.4字典
3.4.1字典的使用和創建
(1)創建空字典
①手動創建:dict1{}
②用函數(方法):dict1 = dict()
(2)創建有數據的字典
①鍵值對,各鍵值對之間用逗號隔開
如:dict2 = {'name': 'python', 'age': 28}
② 用函數(方法):dict()
如:dict4 = dict(name='aa', age=18)
經典例子:
dict5 = dict([('one',1),('two',2)])
print(dict5)
dict6 = {}
dict7 = dict6.fromkeys(['aa', 'bb', 'cc'], 10)
#當字典的所有鍵的取值均是相同值時用fromkeys
print(dict7)
(3)取數據
字典不支持下標,也就是說是無序的。字典通過鍵名取數據。
如:print(dict2['name'])
3.4.2字典_修改、增加和查找
(1)查找
① 字典通過鍵名查找數據,如果等號賦值,如果有這個鍵,則修改值;如果沒有,則新增這個鍵值對。如果僅查找鍵名,鍵名不存在時報錯
②get()
通過鍵名查找數據,如果有這個鍵,則返回對應的值;如果沒有,默認返回None;
注意:如果get設置了第二個參數,如果沒有這個鍵,則返回第二個參數(給自己一個提示)
③setdefault()
通過鍵名查找數據,如果有這個鍵,則返回對應的值,如果沒有默認返回None,同時會在字典中新增這個鍵值對,新增的鍵值對的key是查找的那個鍵名,value是None
注意:如果setdefault設置了第二個參數,如果沒有這個鍵,則返回第二個參數,同時默認新增鍵值對。鍵名:第二個參數
(2)增加:update()既能修改又能新增
語法:字典名1.update(字典名2) #用2去更新1
如:
dict1 = {'name': 'python','age':28}
dict2 = {'name': 'gui', 'sex': 'man'}
print(dict2)
# 用2去更新1:既能修改又能新增
dict1.update(dict2)
print(dict1)
3.4.3字典_拷貝
(1)淺拷貝:賦值型拷貝
(2)深拷貝:copy()
(3)copy模塊做拷貝
import copy
dict2 = copy.deepcopy(dict1)
注意:這種方式的好處是複雜數據,添加的時候不影響彼此