第4章 資料序列
1.1 認識字串
字串是 Python 中最常用的資料型別。我們一般使用引號來建立字串。建立字串很簡單,只要為變數分配一個值即可。
a = 'hello world' b = "abcdefg" print(type(a)) print(type(b))
注意:控制檯顯示結果為
<class 'str'>
, 即資料型別為str(字串)。
1.1.1 字串特徵
-
一對引號字串
name1 = 'Tom' name2 = "Rose"
-
三引號字串
name3 = ''' Tom ''' name4 = """ Rose """ a = ''' i am Tom, nice to meet you!''' b = """ i am Rose, nice to meet you! """
注意:三引號形式的字串支援換行。
思考:如果建立一個字串
I'm Tom
?
c = "I'm Tom" d = 'I\'m Tom'
1.1.2 字串輸出
print('hello world') name = 'Tom' print('我的名字是%s' % name) print(f'我的名字是{name}')
1.1.3 字串輸入
在Python中,使用input()
接收使用者輸入。
-
程式碼
name = input('請輸入您的名字:') print(f'您輸入的名字是{name}') print(type(name)) password = input('請輸入您的密碼:') print(f'您輸入的密碼是{password}') print(type(password))
-
輸出結果
1.2 下標
“下標”
又叫“索引”
,就是編號。比如火車座位號,座位號的作用:按照編號快速找到對應的座位。同理,下標的作用即是通過下標快速找到對應的資料。
1.2.1 快速體驗
需求:字串name = "abcdef"
,取到不同下標對應的資料。
-
程式碼
name = "abcdef" print(name[1]) print(name[0])print(name[2])
-
輸出結果
注意:下標從0開始。
1.3 切片
切片是指對操作的物件擷取其中一部分的操作。字串、列表、元組都支援切片操作。
1.3.1 語法
序列[開始位置下標:結束位置下標:步長]
注意
-
不包含結束位置下標對應的資料, 正負整數均可;
-
步長是選取間隔,正負整數均可,預設步長為1。
1.3.2 體驗
name = "abcdefg" print(name[2:5:1]) # cde print(name[2:5]) # cde print(name[:5]) # abcde print(name[1:]) # bcdefg print(name[:]) # abcdefg print(name[::2]) # aceg print(name[:-1]) # abcdef, 負1表示倒數第一個資料 print(name[-4:-1]) # def print(name[::-1]) # gfedcba
1.4 常用操作方法
字串的常用操作方法有查詢、修改和判斷三大類。
1.4.1 查詢
所謂字串查詢方法即是查詢子串在字串中的位置或出現的次數。
-
find():檢測某個子串是否包含在這個字串中,如果在返回這個子串開始的位置下標,否則則返回-1。
-
語法
字串序列.find(子串, 開始位置下標, 結束位置下標)
注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。
-
快速體驗
mystr = "hello world and itcast and itheima and Python" print(mystr.find('and')) # 12 print(mystr.find('and', 15, 30)) # 23 print(mystr.find('ands')) # -1
-
index():檢測某個子串是否包含在這個字串中,如果在返回這個子串開始的位置下標,否則則報異常。
-
語法
字串序列.index(子串, 開始位置下標, 結束位置下標)
注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。
-
快速體驗
mystr = "hello world and itcast and itheima and Python" print(mystr.index('and')) # 12 print(mystr.index('and', 15, 30)) # 23 print(mystr.index('ands')) # 報錯
-
rfind(): 和find()功能相同,但查詢方向為右側開始。
-
rindex():和index()功能相同,但查詢方向為右側開始。
-
count():返回某個子串在字串中出現的次數
-
語法
字串序列.count(子串, 開始位置下標, 結束位置下標)
注意:開始和結束位置下標可以省略,表示在整個字串序列中查詢。
-
快速體驗
mystr = "hello world and itcast and itheima and Python" print(mystr.count('and')) # 3 print(mystr.count('ands')) # 0 print(mystr.count('and', 0, 20)) # 1
1.4.2 修改
所謂修改字串,指的就是通過函式的形式修改字串中的資料。
-
replace():替換
-
語法
字串序列.replace(舊子串, 新子串, 替換次數)
注意:替換次數如果查出子串出現次數,則替換次數為該子串出現次數。
-
快速體驗
mystr = "hello world and itcast and itheima and Python" # 結果:hello world he itcast he itheima he Python print(mystr.replace('and', 'he')) # 結果:hello world he itcast he itheima he Python print(mystr.replace('and', 'he', 10)) # 結果:hello world and itcast and itheima and Python print(mystr)
注意:資料按照是否能直接修改分為可變型別和不可變型別兩種。字串型別的資料修改的時候不能改變原有字串,屬於不能直接修改資料的型別即是不可變型別。
-
split():按照指定字元分割字串。
-
語法
字串序列.split(分割字元, num)
注意:num表示的是分割字元出現的次數,即將來返回資料個數為num+1個。
-
快速體驗
mystr = "hello world and itcast and itheima and Python" # 結果:['hello world ', ' itcast ', ' itheima ', ' Python'] print(mystr.split('and')) # 結果:['hello world ', ' itcast ', ' itheima and Python'] print(mystr.split('and', 2)) # 結果:['hello', 'world', 'and', 'itcast', 'and', 'itheima', 'and', 'Python'] print(mystr.split(' ')) # 結果:['hello', 'world', 'and itcast and itheima and Python'] print(mystr.split(' ', 2))
注意:如果分割字元是原有字串中的子串,分割後則丟失該子串。
-
join():用一個字元或子串合併字串,即是將多個字串合併為一個新的字串。
-
語法
字元或子串.join(多字串組成的序列)
-
快速體驗
list1 = ['chuan', 'zhi', 'bo', 'ke'] t1 = ('aa', 'b', 'cc', 'ddd') # 結果:chuan_zhi_bo_ke print('_'.join(list1)) # 結果:aa...b...cc...ddd print('...'.join(t1))
-
capitalize():將字串第一個字元轉換成大寫。
mystr = "hello world and itcast and itheima and Python" # 結果:Hello world and itcast and itheima and python print(mystr.capitalize())
注意:capitalize()函式轉換後,隻字符串第一個字元大寫,其他的字元全都小寫。
-
title():將字串每個單詞首字母轉換成大寫。
mystr = "hello world and itcast and itheima and Python" # 結果:Hello World And Itcast And Itheima And Python print(mystr.title())
-
lower():將字串中大寫轉小寫。
mystr = "hello world and itcast and itheima and Python" # 結果:hello world and itcast and itheima and python print(mystr.lower())
-
upper():將字串中小寫轉大寫。
mystr = "hello world and itcast and itheima and Python" # 結果:HELLO WORLD AND ITCAST AND ITHEIMA AND PYTHON print(mystr.upper())
-
lstrip():刪除字串左側空白字元。
-
rstrip():刪除字串右側空白字元。
-
strip():刪除字串兩側空白字元。
-
ljust():返回一個原字串左對齊,並使用指定字元(預設空格)填充至對應長度 的新字串。
-
語法
字串序列.ljust(長度, 填充字元)
-
輸出效果
-
rjust():返回一個原字串右對齊,並使用指定字元(預設空格)填充至對應長度 的新字串,語法和ljust()相同。
-
center():返回一個原字串居中對齊,並使用指定字元(預設空格)填充至對應長度 的新字串,語法和ljust()相同。
1.4.3 判斷
所謂判斷即是判斷真假,返回的結果是布林型資料型別:True 或 False。
-
startswith():檢查字串是否是以指定子串開頭,是則返回 True,否則返回 False。如果設定開始和結束位置下標,則在指定範圍內檢查。
-
語法
字串序列.startswith(子串, 開始位置下標, 結束位置下標)
-
快速體驗
mystr = "hello world and itcast and itheima and Python " # 結果:True print(mystr.startswith('hello')) # 結果False print(mystr.startswith('hello', 5, 20))
-
endswith()::檢查字串是否是以指定子串結尾,是則返回 True,否則返回 False。如果設定開始和結束位置下標,則在指定範圍內檢查。
-
語法
字串序列.endswith(子串, 開始位置下標, 結束位置下標)
-
快速體驗
mystr = "hello world and itcast and itheima and Python" # 結果:True print(mystr.endswith('Python')) # 結果:False print(mystr.endswith('python')) # 結果:False print(mystr.endswith('Python', 2, 20))
-
isalpha():如果字串至少有一個字元並且所有字元都是字母則返回 True, 否則返回 False。
mystr1 = 'hello' mystr2 = 'hello12345' # 結果:True print(mystr1.isalpha()) # 結果:False print(mystr2.isalpha())
-
isdigit():如果字串只包含數字則返回 True 否則返回 False。
mystr1 = 'aaa12345' mystr2 = '12345' # 結果: False print(mystr1.isdigit()) # 結果:False print(mystr2.isdigit())
-
isalnum():如果字串至少有一個字元並且所有字元都是字母或數字則返 回 True,否則返回 False。
mystr1 = 'aaa12345' mystr2 = '12345-' # 結果:True print(mystr1.isalnum()) # 結果:False print(mystr2.isalnum())
-
isspace():如果字串中只包含空白,則返回 True,否則返回 False。
mystr1 = '1 2 3 4 5' mystr2 = ' ' # 結果:False print(mystr1.isspace()) # 結果:True print(mystr2.isspace())
1.5 總結
-
下標
-
計算機為資料序列中每個元素分配的從0開始的編號
-
-
切片
序列名[開始位置下標:結束位置下標:步長]
-
常用操作方法
-
find()
-
index()
2 列表
2.1 列表的應用場景
思考:有一個人的姓名(TOM)怎麼書寫儲存程式?
答:變數。
思考:如果一個班級100位學生,每個人的姓名都要儲存,應該如何書寫程式?宣告100個變數嗎?
答:列表即可, 列表一次性可以儲存多個數據。
2.2 列表的格式
[資料1, 資料2, 資料3, 資料4......]
列表可以一次性儲存多個數據,且可以為不同資料型別。
2.3 列表的常用操作
列表的作用是一次性儲存多個數據,程式設計師可以對這些資料進行的操作有:增、刪、改、查。
2.3.1 查詢
1. 下標
name_list = ['Tom', 'Lily', 'Rose'] print(name_list[0]) # Tom print(name_list[1]) # Lily print(name_list[2]) # Rose
2. 函式
-
index():返回指定資料所在位置的下標 。
-
語法
列表序列.index(資料, 開始位置下標, 結束位置下標)
-
快速體驗
name_list = ['Tom', 'Lily', 'Rose'] print(name_list.index('Lily', 0, 2)) # 1
注意:如果查詢的資料不存在則報錯。
-
count():統計指定資料在當前列表中出現的次數。
name_list = ['Tom', 'Lily', 'Rose'] print(name_list.count('Lily')) # 1
-
len():訪問列表長度,即列表中資料的個數。
name_list = ['Tom', 'Lily', 'Rose'] print(len(name_list)) # 3
3. 判斷是否存在
-
in:判斷指定資料在某個列表序列,如果在返回True,否則返回False
name_list = ['Tom', 'Lily', 'Rose'] # 結果:True print('Lily' in name_list) # 結果:False print('Lilys' in name_list)
-
not in:判斷指定資料不在某個列表序列,如果不在返回True,否則返回False
name_list = ['Tom', 'Lily', 'Rose'] # 結果:False print('Lily' not in name_list) # 結果:True print('Lilys' not in name_list)
-
體驗案例
需求:查詢使用者輸入的名字是否已經存在。
name_list = ['Tom', 'Lily', 'Rose'] name = input('請輸入您要搜尋的名字:') if name in name_list: print(f'您輸入的名字是{name}, 名字已經存在') else: print(f'您輸入的名字是{name}, 名字不存在')
2.3.2 增加
作用:增加指定資料到列表中。
-
append():列表結尾追加資料。
-
語法
列表序列.append(資料)
-
體驗
name_list = ['Tom', 'Lily', 'Rose'] name_list.append('xiaoming') # 結果:['Tom', 'Lily', 'Rose', 'xiaoming'] print(name_list)
列表追加資料的時候,直接在原列表裡面追加了指定資料,即修改了原列表,故列表為可變型別資料。
-
注意點
如果append()追加的資料是一個序列,則追加整個序列到列表
name_list = ['Tom', 'Lily', 'Rose'] name_list.append(['xiaoming', 'xiaohong']) # 結果:['Tom', 'Lily', 'Rose', ['xiaoming', 'xiaohong']] print(name_list)
-
extend():列表結尾追加資料,如果資料是一個序列,則將這個序列的資料逐一新增到列表。
-
語法
列表序列.extend(資料)
-
快速體驗
2.1 單個數據
name_list = ['Tom', 'Lily', 'Rose'] name_list.extend('xiaoming') # 結果:['Tom', 'Lily', 'Rose', 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g'] print(name_list)
2.2 序列資料
name_list = ['Tom', 'Lily', 'Rose'] name_list.extend(['xiaoming', 'xiaohong']) # 結果:['Tom', 'Lily', 'Rose', 'xiaoming', 'xiaohong'] print(name_list)
-
insert():指定位置新增資料。
-
語法
列表序列.insert(位置下標, 資料)
-
快速體驗
name_list = ['Tom', 'Lily', 'Rose'] name_list.insert(1, 'xiaoming') # 結果:['Tom', 'xiaoming', 'Lily', 'Rose'] print(name_list)
2.3.3 刪除
-
del
-
語法
del 目標
-
快速體驗
2.1 刪除列表
name_list = ['Tom', 'Lily', 'Rose'] # 結果:報錯提示:name 'name_list' is not defined del name_list print(name_list)
2.2 刪除指定資料
name_list = ['Tom', 'Lily', 'Rose'] del name_list[0] # 結果:['Lily', 'Rose'] print(name_list)
-
pop():刪除指定下標的資料(預設為最後一個),並返回該資料。
-
語法
列表序列.pop(下標)
-
快速體驗
name_list = ['Tom', 'Lily', 'Rose'] del_name = name_list.pop(1) # 結果:Lily print(del_name) # 結果:['Tom', 'Rose'] print(name_list)
-
remove():移除列表中某個資料的第一個匹配項。
-
語法
列表序列.remove(資料)
-
快速體驗
name_list = ['Tom', 'Lily', 'Rose'] name_list.remove('Rose') # 結果:['Tom', 'Lily'] print(name_list)
-
clear():清空列表
name_list = ['Tom', 'Lily', 'Rose'] name_list.clear() print(name_list) # 結果: []
2.3.4 修改
-
修改指定下標資料
name_list = ['Tom', 'Lily', 'Rose'] name_list[0] = 'aaa' # 結果:['aaa', 'Lily', 'Rose'] print(name_list)
-
逆置:reverse()
num_list = [1, 5, 2, 3, 6, 8] num_list.reverse() # 結果:[8, 6, 3, 2, 5, 1] print(num_list)
-
排序:sort()
-
語法
列表序列.sort( key=None, reverse=False)
注意:reverse表示排序規則,reverse = True 降序, reverse = False 升序(預設)
-
快速體驗
num_list = [1, 5, 2, 3, 6, 8] num_list.sort() # 結果:[1, 2, 3, 5, 6, 8] print(num_list)
2.3.5 複製
函式:copy()
name_list = ['Tom', 'Lily', 'Rose'] name_li2 = name_list.copy() # 結果:['Tom', 'Lily', 'Rose'] print(name_li2)
2.4 列表的迴圈遍歷
需求:依次列印列表中的各個資料。
2.4.1 while
-
程式碼
name_list = ['Tom', 'Lily', 'Rose'] i = 0 while i < len(name_list): print(name_list[i]) i += 1
-
執行結果
2.4.2 for
-
程式碼
name_list = ['Tom', 'Lily', 'Rose'] for i in name_list: print(i)
-
執行結果
2.5 列表巢狀
所謂列表巢狀指的就是一個列表裡面包含了其他的子列表。
應用場景:要儲存班級一、二、三三個班級學生姓名,且每個班級的學生姓名在一個列表。
name_list = [['小明', '小紅', '小綠'], ['Tom', 'Lily', 'Rose'], ['張三', '李四', '王五']]
思考: 如何查詢到資料"李四"?
# 第一步:按下標查詢到李四所在的列表 print(name_list[2]) # 第二步:從李四所在的列表裡面,再按下標找到資料李四 print(name_list[2][1])
2.6 綜合應用 -- 隨機分配辦公室
需求:有三個辦公室,8位老師,8位老師隨機分配到3個辦公室
2.7 總結
-
列表的格式
[資料1, 資料2, 資料3]
-
常用操作方法
-
index()
-
len()
-
append()
-
pop()
-
remove()
-
-
列表巢狀
name_list = [['小明', '小紅', '小綠'], ['Tom', 'Lily', 'Rose'], ['張三', '李四', '王五']] name_list[2][1]
3.1 元組的應用場景
思考:如果想要儲存多個數據,但是這些資料是不能修改的資料,怎麼做?
答:列表?列表可以一次性儲存多個數據,但是列表中的資料允許更改。
num_list = [10, 20, 30]
num_list[0] = 100
一個元組可以儲存多個數據,元組內的資料是不能修改的。
3.2 定義元組
元組特點:定義元組使用小括號,且逗號隔開各個資料,資料可以是不同的資料型別。
# 多個數據元組 t1 = (10, 20, 30) # 單個數據元組 t2 = (10,)
注意:如果定義的元組只有一個數據,那麼這個資料後面也好新增逗號,否則資料型別為唯一的這個資料的資料型別
t2 = (10,) print(type(t2)) # tuple t3 = (20) print(type(t3)) # int t4 = ('hello') print(type(t4)) # str
3.3 元組的常見操作
元組資料不支援修改,只支援查詢,具體如下:
-
按下標查詢資料
tuple1 = ('aa', 'bb', 'cc', 'bb') print(tuple1[0]) # aa
-
index():查詢某個資料,如果資料存在返回對應的下標,否則報錯,語法和列表、字串的index方法相同。
tuple1 = ('aa', 'bb', 'cc', 'bb') print(tuple1.index('aa')) # 0
-
count():統計某個資料在當前元組出現的次數。
tuple1 = ('aa', 'bb', 'cc', 'bb') print(tuple1.count('bb')) # 2
-
len():統計元組中資料的個數。
tuple1 = ('aa', 'bb', 'cc', 'bb') print(len(tuple1)) # 4
注意:元組內的直接資料如果修改則立即報錯
tuple1 = ('aa', 'bb', 'cc', 'bb') tuple1[0] = 'aaa'
但是如果元組裡面有列表,修改列表裡面的資料則是支援的,故自覺很重要。
tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30) print(tuple2[2]) # 訪問到列表 # 結果:(10, 20, ['aaaaa', 'bb', 'cc'], 50, 30) tuple2[2][0] = 'aaaaa' print(tuple2)
-
定義元組
t1 = (10, 20, 30)
t2 = (10,)
-
常用操作方法
-
index()
-
len()
4.1 字典的應用場景
思考1: 如果有多個數據,例如:'Tom', '男', 20,如何快速儲存?
答:列表
list1 = ['Tom', '男', 20]
思考2:如何查詢到資料'Tom'?
答:查詢到下標為0的資料即可。
list1[0]
思考3:如果將來資料順序發生變化,如下所示,還能用list1[0]
訪問到資料'Tom'嗎?。
list1 = ['男', 20, 'Tom']
答:不能,資料'Tom'此時下標為2。
思考4:資料順序發生變化,每個資料的下標也會隨之變化,如何保證資料順序變化前後能使用同一的標準查詢資料呢?
答:字典,字典裡面的資料是以鍵值對形式出現,字典資料和資料順序沒有關係,即字典不支援下標,後期無論資料如何變化,只需要按照對應的鍵的名字查詢資料即可。
4.2 建立字典的語法
字典特點:
-
符號為大括號
-
資料為鍵值對形式出現
-
各個鍵值對之間用逗號隔開
# 有資料字典 dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} # 空字典 dict2 = {} dict3 = dict()
注意:一般稱冒號前面的為鍵(key),簡稱k;冒號後面的為值(value),簡稱v。
4.3 字典常見操作
4.3.1 增
寫法:字典序列[key] = 值
注意:如果key存在則修改這個key對應的值;如果key不存在則新增此鍵值對。
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} dict1['name'] = 'Rose' # 結果:{'name': 'Rose', 'age': 20, 'gender': '男'} print(dict1) dict1['id'] = 110 # {'name': 'Rose', 'age': 20, 'gender': '男', 'id': 110} print(dict1)
注意:字典為可變型別。
4.3.2 刪
-
del() / del:刪除字典或刪除字典中指定鍵值對。
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} del dict1['gender'] # 結果:{'name': 'Tom', 'age': 20} print(dict1)
-
clear():清空字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} dict1.clear() print(dict1) # {}
4.3.3 改
寫法:字典序列[key] = 值
注意:如果key存在則修改這個key對應的值;如果key不存在則新增此鍵值對。
4.3.4 查
1. key值查詢
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} print(dict1['name']) # Tom print(dict1['id']) # 報錯
如果當前查詢的key存在,則返回對應的值;否則則報錯。
2. get()
-
語法
字典序列.get(key, 預設值)
注意:如果當前查詢的key不存在則返回第二個引數(預設值),如果省略第二個引數,則返回None。
-
快速體驗
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} print(dict1.get('name')) # Tom print(dict1.get('id', 110)) # 110 print(dict1.get('id')) # None
3. keys()
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} print(dict1.keys()) # dict_keys(['name', 'age', 'gender'])
4. values()
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} print(dict1.values()) # dict_values(['Tom', 20, '男'])
3.4.5 items()
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} print(dict1.items()) # dict_items([('name', 'Tom'), ('age', 20), ('gender', '男')])
4.4 字典的迴圈遍歷
4.4.1 遍歷字典的key
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} for key in dict1.keys(): print(key)
4.4.2 遍歷字典的value
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} for value in dict1.values(): print(value)
4.4.3 遍歷字典的元素
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} for item in dict1.items(): print(item)
4.4.4 遍歷字典的鍵值對
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'} for key, value in dict1.items(): print(f'{key} = {value}')
4.5 總結
-
定義字典
dict1 = {'name': 'Python', 'age': 30} dict2 = {} dict3 = dict()
-
常見操作
-
增/改
-
字典序列[key] = 值
-
查詢
-
字典序列[key]
-
keys()
-
values()
-
items()
-
5.1 建立集合
建立集合使用{}
或set()
, 但是如果要建立空集合只能使用set()
,因為{}
用來建立空字典。
s1 = {10, 20, 30, 40, 50} print(s1) s2 = {10, 30, 20, 10, 30, 40, 30, 50} print(s2) s3 = set('abcdefg') print(s3) s4 = set() print(type(s4)) # set s5 = {} print(type(s5)) # dict
特點:
集合可以去掉重複資料;
集合資料是無序的,故不支援下標
5.2 集合常見操作方法
5.2.1 增加資料
-
add()
s1 = {10, 20} s1.add(100) s1.add(10) print(s1) # {100, 10, 20}
因為集合有去重功能,所以,當向集合內追加的資料是當前集合已有資料的話,則不進行任何操作。
-
update(), 追加的資料是序列。
s1 = {10, 20} # s1.update(100) # 報錯 s1.update([100, 200]) s1.update('abc') print(s1)
5.2.2 刪除資料
-
remove(),刪除集合中的指定資料,如果資料不存在則報錯。
s1 = {10, 20} s1.remove(10) print(s1) s1.remove(10) # 報錯 print(s1)
-
discard(),刪除集合中的指定資料,如果資料不存在也不會報錯。
s1 = {10, 20} s1.discard(10) print(s1) s1.discard(10) print(s1)
-
pop(),隨機刪除集合中的某個資料,並返回這個資料。
s1 = {10, 20, 30, 40, 50} del_num = s1.pop() print(del_num) print(s1)
5.2.3 查詢資料
-
in:判斷資料在集合序列
-
not in:判斷資料不在集合序列
s1 = {10, 20, 30, 40, 50} print(10 in s1) print(10 not in s1)
5.3 總結
-
建立集合
-
有資料集合
s1 = {資料1, 資料2, ...}
-
無資料集合
s1 = set()
-
-
常見操作
-
增加資料
-
add()
-
update()
-
-
刪除資料
-
remove()
-
discard()
-
運算子 | 描述 | 支援的容器型別 |
---|---|---|
+ | 合併 | 字串、列表、元組 |
* | 複製 | 字串、列表、元組 |
in | 元素是否存在 | 字串、列表、元組、字典 |
not in | 元素是否不存在 | 字串、列表、元組、字典 |
6.1.1 +
# 1. 字串 str1 = 'aa' str2 = 'bb' str3 = str1 + str2 print(str3) # aabb # 2. 列表 list1 = [1, 2] list2 = [10, 20] list3 = list1 + list2 print(list3) # [1, 2, 10, 20] # 3. 元組 t1 = (1, 2) t2 = (10, 20) t3 = t1 + t2 print(t3) # (10, 20, 100, 200)
6.1.2 *
# 1. 字串 print('-' * 10) # ---------- # 2. 列表 list1 = ['hello'] print(list1 * 4) # ['hello', 'hello', 'hello', 'hello'] # 3. 元組 t1 = ('world',) print(t1 * 4) # ('world', 'world', 'world', 'world')
6.1.3 in或not in
# 1. 字串 print('a' in 'abcd') # True print('a' not in 'abcd') # False # 2. 列表 list1 = ['a', 'b', 'c', 'd'] print('a' in list1) # True print('a' not in list1) # False # 3. 元組 t1 = ('a', 'b', 'c', 'd') print('aa' in t1) # False print('aa' not in t1) # True
6.2 公共方法
函式 | 描述 |
---|---|
len() | 計算容器中元素個數 |
del 或 del() | 刪除 |
max() | 返回容器中元素最大值 |
min() | 返回容器中元素最小值 |
range(start, end, step) | 生成從start到end的數字,步長為 step,供for迴圈使用 |
enumerate() | 函式用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。 |
6.2.1 len()
# 1. 字串 str1 = 'abcdefg' print(len(str1)) # 7 # 2. 列表 list1 = [10, 20, 30, 40] print(len(list1)) # 4 # 3. 元組 t1 = (10, 20, 30, 40, 50) print(len(t1)) # 5 # 4. 集合 s1 = {10, 20, 30} print(len(s1)) # 3 # 5. 字典 dict1 = {'name': 'Rose', 'age': 18} print(len(dict1)) # 2
6.2.2 del()
# 1. 字串 str1 = 'abcdefg' del str1 print(str1) # 2. 列表 list1 = [10, 20, 30, 40] del(list1[0]) print(list1) # [20, 30, 40]
6.2.3 max()
# 1. 字串 str1 = 'abcdefg' print(max(str1)) # g # 2. 列表 list1 = [10, 20, 30, 40] print(max(list1)) # 40
6.2.4 min()
# 1. 字串 str1 = 'abcdefg' print(min(str1)) # a # 2. 列表 list1 = [10, 20, 30, 40] print(min(list1)) # 10
6.2.5 range()
# 1 2 3 4 5 6 7 8 9 for i in range(1, 10, 1): print(i) # 1 3 5 7 9 for i in range(1, 10, 2): print(i) # 0 1 2 3 4 5 6 7 8 9 for i in range(10): print(i)
注意:range()生成的序列不包含end數字。
6.2.6 enumerate()
-
語法
enumerate(可遍歷物件, start=0)
注意:start引數用來設定遍歷資料的下標的起始值,預設為0。
-
快速體驗
list1 = ['a', 'b', 'c', 'd', 'e'] for i in enumerate(list1): print(i) for index, char in enumerate(list1, start=1): print(f'下標是{index}, 對應的字元是{char}')
6.3 容器型別轉換
6.3.1 tuple()
作用:將某個序列轉換成元組
list1 = [10, 20, 30, 40, 50, 20] s1 = {100, 200, 300, 400, 500} print(tuple(list1)) print(tuple(s1))
6.3.2 list()
作用:將某個序列轉換成列表
t1 = ('a', 'b', 'c', 'd', 'e') s1 = {100, 200, 300, 400, 500} print(list(t1)) print(list(s1))
6.3.3 set()
作用:將某個序列轉換成集合
list1 = [10, 20, 30, 40, 50, 20] t1 = ('a', 'b', 'c', 'd', 'e') print(set(list1)) print(set(t1))
注意:
-
集合可以快速完成列表去重
-
集合不支援下標
6.4 總結
-
運算子
-
+
-
in / not in
-
-
公共方法
-
len()
-
del()
-
range()
-
enumerate()
-
-
資料型別轉換
-
tuple()
-
list()
-
set()
-
7.1 列表推導式
作用:用一個表示式建立一個有規律的列表或控制一個有規律列表。
列表推導式又叫列表生成式。
7.1.1 快速體驗
需求:建立一個0-10的列表。
-
while迴圈實現
# 1. 準備一個空列表 list1 = [] # 2. 書寫迴圈,依次追加數字到空列表list1中 i = 0 while i < 10: list1.append(i) i += 1 print(list1)
-
for迴圈實現
list1 = [] for i in range(10): list1.append(i) print(list1)
-
列表推導式實現
list1 = [i for i in range(10)] print(list1)
7.1.2 帶if的列表推導式
需求:建立0-10的偶數列表
-
方法一:range()步長實現
list1 = [i for i in range(0, 10, 2)] print(list1)
-
方法二:if實現
list1 = [i for i in range(10) if i % 2 == 0] print(list1)
7.1.3 多個for迴圈實現列表推導式
需求:建立列表如下:
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
-
程式碼如下:
list1 = [(i, j) for i in range(1, 3) for j in range(3)] print(list1)
7.2 字典推導式
思考:如果有如下兩個列表:
list1 = ['name', 'age', 'gender'] list2 = ['Tom', 20, 'man']
如何快速合併為一個字典?
答:字典推導式
字典推導式作用:快速合併列表為字典或提取字典中目標資料。
7.2.1 快速體驗
-
建立一個字典:字典key是1-5數字,value是這個數字的2次方。
dict1 = {i: i**2 for i in range(1, 5)} print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16}
-
將兩個列表合併為一個字典
list1 = ['name', 'age', 'gender'] list2 = ['Tom', 20, 'man'] dict1 = {list1[i]: list2[i] for i in range(len(list1))} print(dict1)
-
提取字典中目標資料
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99} # 需求:提取上述電腦數量大於等於200的字典資料 count1 = {key: value for key, value in counts.items() if value >= 200} print(count1) # {'MBP': 268, 'DELL': 201}
7.3 集合推導式
需求:建立一個集合,資料為下方列表的2次方。
list1 = [1, 1, 2]
程式碼如下:
list1 = [1, 1, 2] set1 = {i ** 2 for i in list1} print(set1) # {1, 4}
注意:集合有資料去重功能。
7.4 總結
-
推導式的作用:簡化程式碼
-
推導式寫法
# 列表推導式 [xx for xx in range()] # 字典推導式 {xx1: xx2 for ... in ...} # 集合推導式 {xx for xx in ...}