耗時(shí)600小時(shí)整理《Python教程全套》完全入門版,分享一起學(xué)習(xí)_高清附字幕

〇、前言
1.?關(guān)于筆記
筆記從WPS復(fù)制到B站的,沒有文字大小和顏色
筆記中前面帶#的是注釋內(nèi)容
目前已完結(jié)(P6-P169)
因?yàn)锽站筆記只能記20000字,這里的筆記從原筆記刪去近一半內(nèi)容。幾乎沒有示例內(nèi)容,沒有二十四章、函數(shù)及以后內(nèi)容
關(guān)于WPS筆記和一些其他內(nèi)容,可以通過下面的百度網(wǎng)盤鏈接下載
https://pan.baidu.com/s/1fTwjyoM81_OOAccPNhGE9Q?pwd=h3fg
筆記中如果有錯(cuò)誤的地方歡迎在評論區(qū)指正
2.?關(guān)于擴(kuò)展
2.1.?擴(kuò)展大多數(shù)只擴(kuò)展基本概念和用法
2.2.?一部分注釋也可以當(dāng)做擴(kuò)展
2.3.?關(guān)于擴(kuò)展的內(nèi)容
部分內(nèi)容轉(zhuǎn)摘或摘編自以下網(wǎng)站:
菜鳥教程:https://www.runoob.com/
C語言中文網(wǎng):http://c.biancheng.net/
部分內(nèi)容來源網(wǎng)絡(luò)、來源視頻或自我理解
一、輸出函數(shù)print()
1.?print()函數(shù)輸出內(nèi)容
數(shù)字
字符串
含有運(yùn)算符的表達(dá)式
2.?print()函數(shù)輸出目的地
顯示器
文件
3.?print()函數(shù)輸出形式
換行
不換行
4.?補(bǔ)充
a+的含義:如果文件不存在就創(chuàng)建,存在就在文件內(nèi)容的后面繼續(xù)追加
內(nèi)置函數(shù):不需要前面加任何前綴,直接可以使用的函數(shù)
二、轉(zhuǎn)義字符與原字符
(1)、轉(zhuǎn)義字符
1.?組成
反斜杠(\)+想要實(shí)現(xiàn)的轉(zhuǎn)義功能首字母
2.?作用
2.1.?當(dāng)字符串中包含反斜杠(\)、單引號和雙引號('?")等有特殊用途的字符時(shí)、必須使用反斜杠(\)進(jìn)行轉(zhuǎn)義(轉(zhuǎn)換一個(gè)含義)
示例:
反斜杠:\\
單引號:\'
雙引號:\"
2.2.?當(dāng)字符串中包含換行、回車、水平制表位或退格等無法直接表示的特殊字符時(shí),也可以使用轉(zhuǎn)義字符
示例:
換行:\n (newline)
回車:\r (return)
水平制表位:\t (tab)
# \t占4個(gè)字符的位置
退格:\b (back space)
(2)、原字符
1.?含義
不希望字符串中的轉(zhuǎn)義字符起作用,讓轉(zhuǎn)義字符不起作用的叫原字符
2.?使用
在字符串之前加上r或R
示例:
print(r'hello\nworld')
print(R'hello\nworld')
3.?注意事項(xiàng)
最后一個(gè)字符不能是反斜杠(\)
示例:
錯(cuò)誤示范:print(r'hello\nworld\')
正確示范:print(r'hello\nworld\\')
三、二進(jìn)制與字符編碼
(1)、二進(jìn)制
1.?計(jì)算機(jī)換算單位
8位(8bit)->1字節(jié)(1byte)??# 8位指8個(gè)位置
1024字節(jié)(1024byte)->1千字節(jié)(1KB)
1024千字節(jié)(1024KB)->1兆字節(jié)(1MB)
1024兆字節(jié)(1024MB)->1吉字節(jié)(1GB)
1024吉字節(jié)(1024GB)->1太字節(jié)(1TB)
擴(kuò)展:
1024太字節(jié)(1024TB)->1拍字節(jié)(1PB)
1024拍字節(jié)(1024PB)->1艾字節(jié)(1EB)
位(bit)<字節(jié)(byte)<千字節(jié)(KB)<兆字節(jié)(MB)<吉字節(jié)(千兆字節(jié)GB)<太字節(jié)(TB)<拍字節(jié)(PB)<艾字節(jié)(EB)
2.?二進(jìn)制的轉(zhuǎn)換
2.1.?什么是位
在計(jì)算機(jī)中的二進(jìn)制數(shù)系統(tǒng)中,每個(gè)0或1就是一個(gè)位(bit)
2.2.?8位
二位用0和1組合可表示4種狀態(tài),八位用0和1組合可以表示256種狀態(tài)(28),八位的256種狀態(tài)對應(yīng)現(xiàn)實(shí)生活中的256種符號(ASCII碼表)
2.3.?十進(jìn)制的轉(zhuǎn)換
使用電腦上的計(jì)算器(或在運(yùn)行里輸入calc),在查看里點(diǎn)擊程序員型
2.4.?使用python進(jìn)行字符轉(zhuǎn)換
二進(jìn)制轉(zhuǎn)字符:
print(chr(0b二進(jìn)制))
字符轉(zhuǎn)十進(jìn)制:
print(ord('字符'))
(2)、字符編碼
1.?二進(jìn)制與字符編碼
二進(jìn)制0和1->ASCII碼表
????->GB2312(80后)->GBK(90后)->GB18030(00后)
# 80后只能表示簡體中文,90后能表示繁體中文,00后能表示少數(shù)民族文字
????->其他國家的字符編碼
——>(統(tǒng)一)Unicode(中英都用2個(gè)字節(jié))->UTF-8(中文3個(gè)字節(jié),英文1個(gè)字節(jié))
2.?字符的表示
字符可以用二進(jìn)制、八進(jìn)制、十進(jìn)制或十六進(jìn)制表示,但最終到計(jì)算機(jī)會(huì)變成二進(jìn)制,因?yàn)橛?jì)算機(jī)只識別二進(jìn)制
四、Python中的標(biāo)識符和保留字
(1)、保留字
1.?什么是保留字
有些單詞被python賦予特定的意義,這些單詞在給python文件命名或給變量起名時(shí)不允許使用
2.?保留字有哪些
在python中輸入:
import keyword
print(keyword.kwlist)
可以查詢所有保留字
保留字列表:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
(2)、標(biāo)識符
1.?什么是標(biāo)識符
在給變量、函數(shù)、類、模塊和其他對象起名字的名字就叫標(biāo)識符(需要你自己命名字的)
2.?標(biāo)識符的規(guī)則
可以使用字母、數(shù)字、下劃線
不可以使用數(shù)字開頭
不可以使用保留字
嚴(yán)格區(qū)分大小寫
# Python3中可以使用漢字作為標(biāo)識符,但不建議使用或避免使用
五、變量的定義和使用
1.?定義
可以改變的量
2.?使用
變量名(標(biāo)識符)+賦值運(yùn)算符+值
3.?組成
# obj->對象
標(biāo)識:表示對象所儲(chǔ)存的內(nèi)存地址,使用內(nèi)置函數(shù)id(obj)來獲取
類型:表示對象的數(shù)據(jù)類型,使用內(nèi)置函數(shù)type(obj)來獲取
值:表示對象所儲(chǔ)存的具體數(shù)據(jù),使用print(obj)可以將值進(jìn)行打印輸出
六、變量的多次賦值
1.?什么是多次賦值
多次賦值指給一個(gè)變量多次賦值
2.?多次賦值的結(jié)果
當(dāng)多次賦值之后,變量名會(huì)指向新的空間
七、數(shù)據(jù)中常見的數(shù)據(jù)類型
(1)、整數(shù)類型(int)
1.?表示
表示正數(shù)、負(fù)數(shù)和零
表示進(jìn)制:
十進(jìn)制->默認(rèn)的進(jìn)制
二進(jìn)制->以0b開頭
八進(jìn)制->以0o開頭
十六進(jìn)制->以0x開頭
(2)、浮點(diǎn)數(shù)類型(float)
1.?組成
浮點(diǎn)數(shù)是由整數(shù)部分和小數(shù)部分組成
2.?問題
浮點(diǎn)數(shù)儲(chǔ)存不精確,原因是計(jì)算機(jī)是使用二進(jìn)制存儲(chǔ)的,所以在存儲(chǔ)浮點(diǎn)數(shù)時(shí)不精確
# 不是所有浮點(diǎn)數(shù)計(jì)算都有問題
3.?解決辦法
通過導(dǎo)入模塊decimal來解決浮點(diǎn)數(shù)的問題
(3)、布爾類型(bool)
1.?表示
表示真或假的值
True表示真,F(xiàn)alse表示假
布爾值可以轉(zhuǎn)化為整數(shù)
True->1 False->0
(4)、字符串類型(str)
1.?定義
·?字符串又被稱為不可變的字符序列
·?可以使用單引號''雙引號''''三引號''''''或""""""來定義
·?單引號和雙引號定義的字符串必須在一行
·?三引號定義的字符串可以分布在連續(xù)的多行
八、數(shù)據(jù)類型轉(zhuǎn)換
(1)、為什么需要數(shù)據(jù)類型轉(zhuǎn)換
將不同數(shù)據(jù)類型的數(shù)據(jù)拼接在一起
(2)、str()函數(shù)與int()函數(shù)
1.?不同類型進(jìn)行連接時(shí)報(bào)錯(cuò)
str與int連接時(shí)會(huì)報(bào)錯(cuò)
2.?解決方案
2.1.?將其他數(shù)據(jù)類型轉(zhuǎn)成字符串類型:str()函數(shù)
2.2.?將其他數(shù)據(jù)類型轉(zhuǎn)成整數(shù)類型:int()函數(shù)
(3)、float()函數(shù)
1.?作用
將其他數(shù)據(jù)類型轉(zhuǎn)成浮點(diǎn)數(shù)類型
2.?注意事項(xiàng)
·?文字類無法轉(zhuǎn)成整數(shù)
·?整數(shù)轉(zhuǎn)成浮點(diǎn)數(shù),末尾為“.0”
(4)、總結(jié)
將其他數(shù)據(jù)轉(zhuǎn)成字符串
str()
將其他數(shù)據(jù)轉(zhuǎn)成整數(shù)
int()
將其他數(shù)據(jù)轉(zhuǎn)成浮點(diǎn)數(shù)
float()
擴(kuò)展:
將其他數(shù)據(jù)轉(zhuǎn)成布爾值
bool()??# 值是True或False,具體在“十三、對象的布爾值”會(huì)講
九、Python中的注釋
1.?注釋是什么
·?在代碼中對代碼的功能進(jìn)行解釋說明的標(biāo)注性文字,可以提高代碼的可讀性
·?注釋內(nèi)容會(huì)被Python解釋器忽略
2.?注釋的類型
2.1.?單行注釋
以“#”開頭,直到換行結(jié)束
示例:
#?單行注釋
2.2.?多行注釋
并沒有單獨(dú)的多行注釋標(biāo)記,將一對三引號(''''''或"""""")之間的代碼稱為多行注釋
示例:
'''多行
注釋'''
"""多行
注釋"""
2.3.?中文編碼聲明注釋
在文件開頭加上中文聲明注釋,用以指定源碼文件的編碼格式
python中默認(rèn)的存儲(chǔ)編碼是UTF-8
更改:
在前面寫上一句代碼
#?coding:編碼
示例:
#?coding:utf-8
十、input()函數(shù)
(1)、input()函數(shù)的基本使用
1.?作用
接收來自用戶的輸入
2.?使用
變量+賦值運(yùn)算符+input(提問)
# 提問是在輸入之前程序給你的一個(gè)提示語,根據(jù)提示語輸入一個(gè)數(shù)據(jù)
(2)、input()函數(shù)的高級使用
錄入兩個(gè)整數(shù),計(jì)算兩個(gè)整數(shù)的和
a?=?input('請輸入第一個(gè)加數(shù)')
b?=?input('請輸入第二個(gè)加數(shù)')
方法1:
print(int(a)+int(b))
方法2:
a?=?int(a)
b?=?int(b)
print(a+b)
運(yùn)行結(jié)果:
請輸入第一個(gè)加數(shù)100
請輸入第二個(gè)加數(shù)200
300
十一、Python中常用的運(yùn)算符
(1)、算術(shù)運(yùn)算符
1.?標(biāo)準(zhǔn)算術(shù)運(yùn)算符
加(+)、減(-)、乘(*)、除(/)、整除(//)
# 整除是指兩個(gè)數(shù)相除,結(jié)果為向下取整
2.?取余運(yùn)算符(取模運(yùn)算)
%??# 取模,返回兩個(gè)數(shù)相除的余數(shù)
3.?冪運(yùn)算符
**
4.?一正一負(fù)的整除和取余
4.1.?整除時(shí)結(jié)果向下取整
4.2.?取余時(shí)要公式:余數(shù)=被除數(shù)-除數(shù)*商
(2)、賦值運(yùn)算符(=)
1.?執(zhí)行順序
從右到左
2.?支持內(nèi)容
2.1.?支持鏈?zhǔn)劫x值:a?=?b?=?c?=?10
# 實(shí)際只有一個(gè)整數(shù)對象,卻有三個(gè)引用
2.2.?支持參數(shù)賦值:+=、-=、*=、/=、//=、%=
2.3.?支持系列解包賦值:a,?b,?c?=?1,?10,?100
# 等號左右兩邊的個(gè)數(shù)要相同
# 實(shí)際上為將100賦值給c,10賦值給b,1賦值給a
交換兩個(gè)變量的值:
a, b = b, a
(3)、比較運(yùn)算符
1.?作用
對變量或表達(dá)式的結(jié)果進(jìn)行大小、真假等比較,結(jié)果為布爾類型bool(True,False)
2.?比較運(yùn)算符(比較值value)
>:大于
<:小于
>=:大于等于
<=:小于等于
!=:不等于??# 不等于為True,等于為False
==:等于??# ==比較的是值(value)
# 一個(gè)等號為賦值運(yùn)算符,兩個(gè)等號為比較運(yùn)算符
3.?比較運(yùn)算符(比較標(biāo)識id)
is:是
is not:不是
(4)、布爾運(yùn)算符
1.?作用
對布爾值(True,False)之間進(jìn)行運(yùn)算
2.?布爾運(yùn)算符
and:當(dāng)兩個(gè)運(yùn)算數(shù)都為True才為True,其余為False
or:當(dāng)兩個(gè)運(yùn)算數(shù)都為False才為False,其余為True
not:如果運(yùn)算數(shù)為True/False,運(yùn)算結(jié)果為False/True
in:如果x在x里面為True,反之False
not in:如果x不在x里面為True,反之False
(5)、位運(yùn)算符
1.?作用
將數(shù)據(jù)轉(zhuǎn)成二進(jìn)制進(jìn)行計(jì)算
2.?位運(yùn)算符
按位與(&):對應(yīng)數(shù)位都是1,結(jié)果數(shù)位為1,否則為0
按位或(|):對應(yīng)數(shù)位都是0,結(jié)果數(shù)位為0,否則為1
左移位(<<):高位溢出舍棄,低位補(bǔ)0
右移位(>>):低位溢出舍棄,高位補(bǔ)0
(6)、運(yùn)算符的優(yōu)先級
1.?優(yōu)先級
算術(shù)運(yùn)算【(**)->(*,/,//,%)->(+,-)】
->位運(yùn)算【(<<,>>)->(&)->(|)】
->比較運(yùn)算【(>,<,>=,<=,==,!=)】
->布爾運(yùn)算【(and)->(or)】
->賦值運(yùn)算符【(=)】
2.?有括號()
有括號的時(shí)候會(huì)先計(jì)算括號中的內(nèi)容
十二、程序的組織結(jié)構(gòu)
1.?順序結(jié)構(gòu)
程序從上到下順序地執(zhí)行代碼,中間沒有任何的判斷和跳轉(zhuǎn),直到程序結(jié)束
2.?分支結(jié)構(gòu)(選擇結(jié)構(gòu))
3.?循環(huán)結(jié)構(gòu)
# 分支結(jié)構(gòu)(選擇結(jié)構(gòu))和循環(huán)結(jié)構(gòu)后面會(huì)說
十三、對象的布爾值
1.?對象
Python中一切皆對象,所有對象都有一個(gè)布爾值(True,False)
2.?獲取對象的布爾值
使用內(nèi)置函數(shù)bool()
3.?布爾值為False的對象
False
數(shù)值0
None
空字符串
空列表
空元組
空字典
空集合
# 除以上的對象,其他對象的布爾值都為True
十四、分支結(jié)構(gòu)(選擇結(jié)構(gòu))
(1)、單分支結(jié)構(gòu)
1.?什么是分支結(jié)構(gòu)(選擇結(jié)構(gòu))
程序根據(jù)判斷條件的布爾值選擇性地執(zhí)行部分代碼,明確的讓計(jì)算機(jī)知道在什么條件下,該去做什么
2.?單分支結(jié)構(gòu)的語法
中文語義:如果......就......
語法結(jié)構(gòu):
if?條件表達(dá)式:
????條件執(zhí)行體
# 如果條件表達(dá)式為True就執(zhí)行條件執(zhí)行體,如果為False就不執(zhí)行
(2)、雙分支結(jié)構(gòu)
1.?中文語義
如果......不滿足......就......
示例:
如果n>1為True,不是就為False
2.?語法結(jié)構(gòu)
if?條件表達(dá)式:
????條件執(zhí)行體1
else:
????條件執(zhí)行體2
# 如果條件表達(dá)式為True就執(zhí)行條件執(zhí)行體1,如果為False就執(zhí)行條件執(zhí)行體2
(3)、多分支結(jié)構(gòu)
1.?中文語義
是...... 不是
是...... 不是
......
是...... 是
2.?語法結(jié)構(gòu)
if?條件表達(dá)式1:??# 注意冒號
????條件執(zhí)行體1
elif?條件表達(dá)式2:??# elif是else和if的簡寫
????條件執(zhí)行體2
elif?條件表達(dá)式N:
????條件執(zhí)行體N
else:
條件執(zhí)行體N+1
# 如果條件表達(dá)式1為True就執(zhí)行條件執(zhí)行體1,后續(xù)的不作判斷。如果為False就判斷條件表達(dá)式2,以此類推
擴(kuò)展:elif與if的區(qū)別:
if判斷完條件表達(dá)式1后,后續(xù)的繼續(xù)判斷
elif判斷完條件表達(dá)式1后,后續(xù)的不作判斷
兩者判斷條件表達(dá)式都為False才會(huì)執(zhí)行else的語句
(4)、嵌套if的使用
1.?語法結(jié)構(gòu)
if?條件表達(dá)式1:
if?內(nèi)層條件表達(dá)式:
內(nèi)存條件執(zhí)行體1
else:
內(nèi)存條件執(zhí)行體2
else:
條件執(zhí)行體
# 紅色的是一對,稱為Y分支結(jié)構(gòu)。藍(lán)色的是一組,藍(lán)色的是給紅色if為Ture的時(shí)候去做的一個(gè)條件執(zhí)行體
(5)、條件表達(dá)式
1.?什么是條件表達(dá)式
條件表達(dá)式是if......else的簡寫??# 用于簡化代碼
2.?語法結(jié)構(gòu)
x?if?判斷條件 else?y??# 這里空格隨意,但至少空一格
3.?運(yùn)算規(guī)則
如果判斷條件的布爾值為True,條件表達(dá)式的返回值為x。否則條件表達(dá)式的返回值為False
十五、pass語句
1.?作用
pass語句什么都不做,只是一個(gè)占位符,用在語法上需要語句的地方
2.?什么時(shí)候用
在搭建語法結(jié)構(gòu)時(shí),還沒想好代碼怎么寫的時(shí)候使用
3.?跟那些語句一起使用
if語句的條件執(zhí)行體
for-in語句的循環(huán)體
定義函數(shù)時(shí)的函數(shù)體
十六、range()函數(shù)的使用
1.?作用
用于生成一個(gè)整數(shù)序列出?# 序列指的是被排成一列的對象
2.?創(chuàng)建range對象的三種方式
2.1.?range(stop):創(chuàng)建一個(gè)[0,stop)之間的整數(shù)序列,步長為1
2.2.?range(start,stop):創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為1
2.3.?range(start,stop,step):創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長為step
# [指的是大/小于等于,(指的是大/小于,所以在這個(gè)整數(shù)序列中包含start但不包含stop,也就是半開半閉區(qū)間。步長指的是相鄰的兩個(gè)數(shù)相差多少,默認(rèn)為1。start、stop和step必須為整數(shù)。
3.?in與not in
可以使用in與not in判斷整數(shù)序列中是否存在(不存在)指定的整數(shù)
4.?range類型的優(yōu)點(diǎn)
不管range對象表示的整數(shù)序列有多長,所有range對象占用的內(nèi)存空間都是相同的,因?yàn)橹恍枰鎯?chǔ)start、stop和step,只有當(dāng)用到range對象時(shí),才會(huì)去計(jì)算序列中的相關(guān)元素
十七、循環(huán)結(jié)構(gòu)
(1)、循環(huán)
反復(fù)做同一件事情的情況,稱為循環(huán)
(2)、while循環(huán)
1.?語法結(jié)構(gòu)
while?條件表達(dá)式:
????條件執(zhí)行體(循環(huán)體)
# 如果條件表達(dá)式的值為True,就執(zhí)行條件執(zhí)行體,然后繼續(xù)判斷條件表達(dá)式。如果為Fasle就結(jié)束循環(huán)
2.?if與while的區(qū)別
if只判斷一次,條件為True執(zhí)行一行
while判斷N+1次,條件為True執(zhí)行N次
3.?四步循環(huán)法
·?初始化變量
·?條件判斷
·?條件執(zhí)行體(循環(huán)體)
·?改變變量
(3)、for-in循環(huán)
1.?in
in表達(dá)從(字符串、序列等)中依次取值,又稱為遍歷
for-in遍歷的對象必須是可迭代對象
# 目前已學(xué)的當(dāng)中,只有兩個(gè)可迭代對象:字符串與序列
2.?語法結(jié)構(gòu)
for?自定義的變量 in?可迭代對象:
循環(huán)體
# 每一次循環(huán)取一個(gè)值,依次取值,直到結(jié)束
# 如果不需要自定義變量,可將自定義變量寫為下劃線_
十八、流程控制語句
(1)、break語句
1.?作用
用于結(jié)束循環(huán)結(jié)構(gòu),通常與分支結(jié)構(gòu)if一起使用
# 執(zhí)行到break會(huì)跳出循環(huán),叫做非正常結(jié)束循環(huán)
2.?示意圖
2.1.?for-in:
2.2.?while:
(2)、continue語句
1.?作用
用于結(jié)束當(dāng)前循環(huán),進(jìn)入下一次循環(huán),通常與分支結(jié)構(gòu)中的if一起使用
2.?示意圖
2.1.?for-in:
2.2.?while:
(3)、else語句
1.?else語句配合使用的兩種情況
1.1.?與if配合使用:if條件表達(dá)式不成立時(shí)執(zhí)行else
1.2.?與while或for-in配合使用:沒有碰到流程控制語句時(shí)執(zhí)行else
# 第二種情況也可以不用else,直接在后面寫
# 以下內(nèi)容屬于"十七、循環(huán)結(jié)構(gòu)"
(4)、嵌套循環(huán)
1.?什么是嵌套循環(huán)
循環(huán)結(jié)構(gòu)中又嵌套了另外的完整的循環(huán)結(jié)構(gòu),其中內(nèi)層循環(huán)做為外層循環(huán)的循環(huán)的循環(huán)體執(zhí)行
# 在循環(huán)中執(zhí)行循環(huán)
擴(kuò)展:
end='\t'
print()函數(shù)默認(rèn)是end='\n'(末尾換行)。end='\t'把末尾改為TAB,從而使不換行。同樣也可以改為end=' ',使末尾加一個(gè)空格字符,也不會(huì)換行。
(5)、二重循環(huán)中的break與continue
二層循環(huán)中的break和continue用于控制本層循環(huán)
# 內(nèi)層循環(huán)中的break和continue不影響外層循環(huán)的繼續(xù)執(zhí)行
十九、列表
(1)、為什么需要列表
1.?存儲(chǔ)
變量可以存儲(chǔ)一個(gè)元素(對象),列表可以存儲(chǔ)N多個(gè)元素(對象),程序可以方便地對這些數(shù)據(jù)進(jìn)行整體操作
2.?在其他語言中
列表相當(dāng)于其他語言中的數(shù)組
(2)、列表對象的創(chuàng)建
1.?使用中括號創(chuàng)建
列表對象名+賦值號+中括號??# 元素之間使用英文的逗號進(jìn)行分隔
示例:
A = [1, 2.0, '3']
2.?調(diào)用內(nèi)置函數(shù)list()
list([])
示例:
A = list([1, 2.0, '3'])
3.?空列表
創(chuàng)建一個(gè)空列表
列表對象名=[]
列表對象名=list()
(3)、列表的特點(diǎn)
1.?列表元素按順序有序排序
列表中每個(gè)元素有序排序,不會(huì)無序排序
2.?索引映射唯一一個(gè)數(shù)據(jù)
列表中每個(gè)元素通過索引去獲取,索引從0開始(從前往后),或從-1開始(從后往前),通過索引可定位唯一一個(gè)元素
3.?列表可以存儲(chǔ)重復(fù)數(shù)據(jù)
列表可以存儲(chǔ)重復(fù)的數(shù)據(jù),不論多少個(gè)
4.?任意數(shù)據(jù)類型可以混存
列表可以存儲(chǔ)不同的數(shù)據(jù)類型,具有更大的包容性
5.?根據(jù)需要?jiǎng)討B(tài)分配和回收內(nèi)存
無論存多少個(gè)元素,都會(huì)根據(jù)多少動(dòng)態(tài)分配內(nèi)存空間
(4)、列表元素的查詢操作
1.?獲取列表中指定元素的索引
使用index()來獲取:列表名.index(元素)
1.1.?如查列表中存在N個(gè)相同元素,只返回相同元素中的第一個(gè)元素的索引
1.2.?如查詢的元素在列表中不存在,則會(huì)拋出ValueError
1.3.?還可以在指定的start和stop之間進(jìn)行查找(在指定范圍查找)
# index(元素,start,stop) 不包括stop
2.?獲取列表中的單個(gè)元素
列表名[]
2.1.?正向索引
從0到N-1??# N為元素的個(gè)數(shù)
2.2.?逆向索引
從-N到-1
2.3.?指定索引不存在
拋出IndexError
3.?獲取列表中的多個(gè)元素(切片操作)
3.1.?語法格式
列表名[start:stop:step]
# 關(guān)于strat,stop和step到十六、range()函數(shù)的使用查看
# 切片在列表的增加操作、刪除操作與修改操作也有涉及
3.2.?切片的結(jié)果
原列表片段的拷貝??# 新切出來的是一個(gè)新的列表對象
3.3.?切片的范圍
[strat,stop)
3.4.?切片中的step
step默認(rèn)為1??# 簡寫為[start:stop]
3.4.1.?step為正數(shù):
[:stop:step]
strat不寫,切片的第一個(gè)元素默認(rèn)是列表的第一個(gè)元素
[strat::step]
stop不寫,切片的最后一個(gè)元素默認(rèn)是列表的最后一個(gè)元素
# 以上都是從start開始往后計(jì)算切片的
3.4.2.?step為負(fù)數(shù):
[:stop:step]
strat不寫,切片的第一個(gè)元素默認(rèn)是列表的最后一個(gè)元素
[strat::step]
stop不寫,切片的最后一個(gè)元素默認(rèn)是列表的第一個(gè)元素
# 以上都是從start開始往前計(jì)算切片的,而且不包括stop
4.?判斷指定元素在列表中是否存在
使用in或not in:
元素 in 列表名
元素 not in 列表名
5.?列表元素的遍歷
使用for-in循環(huán):
for 自定義變量?in 列表名(可迭代對象):
????操作
(5)、列表元素的增加操作
# 以下操作是在原列表的基礎(chǔ)上增加元素,不會(huì)產(chǎn)生新的列表對象
1.?append()
在列表的末尾添加一個(gè)元素
列表名.append(元素)
2.?extend()
在列表的末尾添加至少一個(gè)元素
列表名.extend(元素)
3.?append與extend的區(qū)別
append是向末尾只添加一個(gè)元素,而extend是向末尾添加多個(gè)元素
4.?insert()
在列表的任意位置添加一個(gè)元素
列表名.insert(索引,元素)
5.?切片
在列表的任意位置添加至少一個(gè)元素
列表名[start:stop:step]=元素??# 不包括stop
6.?insert與切片的區(qū)別
insert是只向任意位置添加一個(gè)元素,而切片是切掉一部分元素?fù)Q成另外一部分元素
(6)、列表元素的刪除操作
1.?remove()
·?一次刪除一個(gè)元素
·?重復(fù)元素只刪除第一個(gè)
·?元素不存在拋出ValueError
·?不會(huì)產(chǎn)生新的列表對象
列表名.remove(元素)
2.?pop()
·?刪除一個(gè)指定索引位置上的元素
·?指定索引不存在拋出IndexError
·?不指定索引,刪除列表中最后一個(gè)元素
·?不會(huì)產(chǎn)生新的列表對象
列表名.pop(索引)
3.?切片
·?一次至少刪除一個(gè)元素
·?會(huì)產(chǎn)生新的列表對象,原列表不會(huì)改變
·?用[](空列表)進(jìn)行替掉時(shí),不產(chǎn)生新的列表對象,而是刪除原列表中的內(nèi)容
新列表名=原列表名[start:stop:step]
原列表名[start:stop:step]=[]
4.?clear()與del
clear是清除列表,將列表中的元素清除掉
列表名.clear()
del是刪除列表,會(huì)刪除整個(gè)列表對象
del 列表名
(7)、列表元素的修改操作
1.?指定索引的元素賦予一個(gè)新值
列表名[索引]=元素(新值)
2.?指定的切片賦予一個(gè)新值
列表名[start:stop:step]=元素(新值)
# 這里的start、stop和step與前面切片操作相同
(8)、列表元素的排序操作
對列表當(dāng)中的元素進(jìn)行由小到大,或由大到小的一個(gè)排序操作
常見的兩種方式:
1.?調(diào)用sort()方法
對列表中的所有元素默認(rèn)按照從小到大的順序進(jìn)行排序
列表名.sort()
2.?調(diào)用內(nèi)置函數(shù)sorted()
對列表中的所有元素默認(rèn)按照從小到大的順序進(jìn)行排序,原列表不發(fā)生改變,會(huì)產(chǎn)生新的列表對象
sorted(列表名)
3.?reverse
·?可以指定reverse=True來進(jìn)行降序排序
·?reverse默認(rèn)為False,為升序排序
列表名.sort(reverse=True)
sorted(列表名,reverse=True)
4.?注意事項(xiàng)
int類型與str類型,str類型與bool類型之間不能進(jìn)行排序
(9)、列表生成式
1.?什么是列表生成式
生成列表的一個(gè)公式的簡稱
2.?語法格式
[i*i for i in range(1,10)]
[表示列表元素的表達(dá)式 for 自定義變量 in 可迭代對象]
# “表示列表元素的表達(dá)式”中通常包含“自定義變量”
二十、字典
(1)、什么是字典
1.?字典
·?字典是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,與列表一樣是一個(gè)可變序列
# 可變序列指數(shù)據(jù)結(jié)構(gòu)可執(zhí)行增刪改操作
·?字典是由花括號{}定義的
·?以鍵值對(鍵:值)的方式存儲(chǔ)數(shù)據(jù),字典是一個(gè)無序(無順序排列)的序列
# 鍵值對指的是一對一對存儲(chǔ)的元素
字典名={鍵:值,鍵:值......}
2.?字典示意文本
hash(key3) key3->value3
hash(key4) key4->value4
?
hash(key1) key1->value1
hash(key5) key5->value5
hash(key2) key2->value2
# key1,2,3,4,5指的是第幾個(gè)放入字典中的鍵
# 字典是無序的序列,因?yàn)橐?jīng)過hash函數(shù)的工序(->把鍵放在hash函數(shù)之中去計(jì)算(計(jì)算:你要進(jìn)行存儲(chǔ)的位置)),所以鍵的位置是通過hash函數(shù)計(jì)算得來的
# 因?yàn)槭莌ash函數(shù)計(jì)算得來的,所以要求放在字典中的鍵必須是一個(gè)不可變序列(創(chuàng)建之后不可修改),否則具有不確定因素(鍵改變),例如整數(shù)序列和字符串就是不可變序列
(2)、字典的實(shí)現(xiàn)原理
字典的實(shí)現(xiàn)原理與查字典類似,Python中的字典是根據(jù)key查找value所在的位置
# hash函數(shù)類似查字典時(shí)的找部首和算筆畫
(3)、字典的創(chuàng)建
1.?使用花括號創(chuàng)建
字典名={鍵:值,鍵:值......}
2.?使用內(nèi)置函數(shù)dict()創(chuàng)建
dict(鍵=值,鍵=值......)
# 這里的鍵由于是賦值形式,所以左側(cè)的鍵不加任何符號
3.?空字典
創(chuàng)建一個(gè)空字典
字典名={}
字典名=dict()
# 相同的鍵會(huì)變成一個(gè),也就是不能重復(fù)
(4)、字典的常用操作
1.?字典中元素的獲取
1.1.?[]
字典名[鍵]
1.2.?get()方法
字典名.get(鍵)
1.3.?[]與get()的區(qū)別
如果查找的鍵不存在,[]會(huì)報(bào)錯(cuò)(KeyError),get()不會(huì)報(bào)錯(cuò),會(huì)輸出一個(gè)None,如果指定了默認(rèn)值,就會(huì)在鍵值不存在時(shí)返回默認(rèn)值
字典名.get(鍵,默認(rèn)值)
2.?字典元素的增刪改以及判斷操作
2.1.?key的判斷
使用in或not in判斷指定的鍵在字典中是否存在
鍵 in 字典名/鍵 not in 字典名
2.2.?字典元素的刪除
使用del語句刪除指定的鍵值對
del 字典名[鍵]
# 同樣可以用clear清空字典的元素與del刪除字典:字典名.clear(),del 字典名
# 也可以使用 字典名.pop(鍵) 與del的區(qū)別是pop有返回值,del直接刪除
2.3.?字典元素的新增和修改
字典名[鍵]=值
3.?獲取字典視圖
3.1.?keys()
獲取字典中所有key,數(shù)據(jù)類型為dict_keys
字典名.keys()
3.2.?values()
獲取字典中所有value,數(shù)據(jù)類型為dict_values
字典名.values()
3.3.?items()
獲取字典中所有key,value對,數(shù)據(jù)類型為dict_items
字典名.items()
# items()獲取的鍵值對是元組形式的
# 可以使用list函數(shù)將字典視圖轉(zhuǎn)為列表
4.?字典元素的遍歷
for item in 字典名:
????print(item)
# item(自定義變量)獲取的是字典當(dāng)中的鍵,如果要獲取值,可以使用 字典名[item] 或 字典名.get(item)
(5)、字典的特點(diǎn)
·?字典中的所有元素都是一個(gè)key-value對(鍵值對),key不允許重復(fù),重復(fù)將會(huì)覆蓋,value可以重復(fù)
·?字典中的元素是無序的
·?字典中的key必須是不可變對象
·?字典也可以根據(jù)需要?jiǎng)討B(tài)地伸縮,內(nèi)存隨著元素的加或減而加或減
·?字典會(huì)浪費(fèi)較大的內(nèi)存,但查詢速度快,是一種使用空間換時(shí)間的數(shù)據(jù)結(jié)構(gòu)
(6)、字典生成式
1.?內(nèi)置函數(shù)zip()
用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個(gè)元組,然后返回由這些元組組成的列表,返回的元素個(gè)數(shù)以少的那個(gè)為基準(zhǔn)
2.?字典生成式
將兩個(gè)列表中的第一個(gè)(items)作為字典中的key,第二個(gè)(prices)作為字典中的value
{表示字典key的表達(dá)式:表示字典value的表達(dá)式 for 自定義表示key的變量,自定義表示value的變量 in zip(可迭代對象,可迭代對象)}
{item.upper():price for item,price in zip(items,prices)}
二十一、元組
(1)、什么是元組
1.?元組
元組是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個(gè)不可變序列
元組名=(元素對象,元素對象,元組對象......)
2.?不可變序列與可變序列
不可變序列:字符串、元組等,沒有增、刪、改操作
可變序列:列表、字典等,可以對序列執(zhí)行增、刪、改操作,對象地址不發(fā)生更改
(2)、元組的創(chuàng)建方式
1.?創(chuàng)建方式
1.1.?直接使用小括號()
元組名=(元素對象,元素對象,元組對象......)
1.2.?使用內(nèi)置函數(shù)tuple()
元組名=tuple((元素對象,元素對象,元組對象......))
# 如果是單層括號,里面要是可迭代對象(列表、元組、字典、字符串):
元組名=tuple(可迭代對象)
1.3.?空元組
創(chuàng)建一個(gè)空元組
元組名=()
元組名=tuple()
2.?注意事項(xiàng)
如果元組當(dāng)中只包含一個(gè)元素,需要使用逗號和小括號(如果沒逗號會(huì)被認(rèn)為是本身的數(shù)據(jù)類型)
元組名=(元素對象,)
3.?關(guān)于元組的索引與切片
元組也有索引與切片,其用法與列表相同,用于獲取元素或索引
(3)、元組為什么要設(shè)計(jì)成不可變序列
1.?原因
·?避免由于修改數(shù)據(jù)而導(dǎo)致出錯(cuò)
·?在多任務(wù)環(huán)境下,同時(shí)操作對象時(shí)不需要加鎖
# 多個(gè)操作同時(shí)進(jìn)行,不需要依次進(jìn)行
·?因此,在程序中盡量使用不可變序列
2.?注意事項(xiàng)
元組中存儲(chǔ)的是對象的引用
·?如果元組中對象是不可變對象,則不能再引用其它對象
·?如果元組中對象是可變對象,則可變對象的引用不允許改變,但數(shù)據(jù)可以改變
(4)、元組的遍歷
元組是可迭代對象,所以可以使用for...in進(jìn)行遍歷
for item in 元組名:
print(item)
# item是自定義變量
二十二、集合
集合的概述與創(chuàng)建
1.?集合的概述
·?Python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu)
·?與列表、字典一樣都屬于可變類型的序列
·?集合是沒有value的字典,所以集合也是一個(gè)無序的序列
·?集合也是由花括號{}定義的
2.?示意文本
hash(dataE)->dataE
hash(dataB)->dataB
?
hash(dataA)->dataA
hash(dataC)->dataC
hash(dataD)->dataD
# ABCDE是向集合中添加元素的順序,同樣也是hash函數(shù)計(jì)算位置
3.?集合的創(chuàng)建
3.1.?使用花括號{}創(chuàng)建
集合名={元素,元素,元素......}
# 集合中的元素不允許重復(fù),否則重復(fù)的變?yōu)橐粋€(gè)
3.2.?使用內(nèi)置函數(shù)set()
集合名=
set(range(4))??# range
set([1,2,3])??# 列表
set((1,2,3))??# 元組
set('ABC')??# 字符串,元素為'A','B','C'
set({1,2,3})??# 集合
3.3.?空集合
定義一個(gè)空集合
集合名=set()??# 如果是={},類型為字典
(1)、集合的相關(guān)操作
1.?集合元素的判斷操作
使用in或not in檢查集合中是否存在指定的元素
2.?集合元素的新增操作
2.1.?調(diào)用add()方法,添加一個(gè)元素
集合名.add(元素)
2.2.?調(diào)用update()方法,至少添加一個(gè)元素
·?集合名.update({元素,元素......})?# 集合
·?集合名.update([元素,元素......])?# 列表
...... # 與上面set創(chuàng)建類似,也可以添加字符串和元組等
# 關(guān)于一個(gè)和至少一個(gè),可以參照列表元素的增加操作
3.?集合元素的刪除操作
3.1.?調(diào)用remove()方法,一次刪除一個(gè)指定元素,如果不存在拋出KeyError
集合名.remove(元素)
3.2.?調(diào)用discard()方法,一次刪除一個(gè)指定元素,如果不存在不會(huì)拋異常
集合名.discard(元素)
3.3.?調(diào)用pop()方法,一次只刪除一個(gè)任意元素
集合名.pop()
3.4.?調(diào)用clear()方法,清空集合
集合名.clear()
3.5.?調(diào)用del方法,刪除集合
del 集合名
(2)、集合間的關(guān)系
1.?判斷兩個(gè)集合是否相等
可以使用運(yùn)算符==或!=進(jìn)行判斷
集合A ==/!= 集合B
2.?判斷一個(gè)集合是否是另一個(gè)集合的子集
# 子集定義:一般地,對于兩個(gè)集合A,B,如果集合A中任意一個(gè)元素都是集合B中的元素,我們就說這兩個(gè)集合有包含關(guān)系,稱集合A為集合B的子集,
記作A?B(或B?A),讀作“A含于B”(或“B包含A”)
注:子集定義轉(zhuǎn)摘自《數(shù)學(xué) 必修1A版/普通高中課程標(biāo)準(zhǔn)實(shí)驗(yàn)教科書》,下面的交集定義、并集定義同上
可以調(diào)用方法issubset進(jìn)行判斷
集合A.issubset(集合B)?# 集合A是否是集合B的子集,返回布爾值
3.?判斷一個(gè)集合是否是另一個(gè)集合的超集
# 超集定義:集合A中的每一個(gè)元素都在集合B中,且集合A中可能包含B中沒有的元素,那么集合A就是集合B的超集,相當(dāng)于子集反過來
可以調(diào)用方法issuperset進(jìn)行判斷
集合A.issuperset(集合B)??# 集合A是否是集合B的超集,返回布爾值
4.?判斷兩個(gè)集合是否沒有交集
# 交集定義:一般地,由屬于集合A且屬于集合B的所有元素組成的集合,稱為A與B的交集,記作A∩B(讀作“A交B”)
可以調(diào)用方法isdisjoint進(jìn)行判斷
集合A.isdisjoint(集合B)??# 集合A與集合B是否沒交集,返回布爾值
(3)、集合的數(shù)學(xué)(數(shù)據(jù))操作
1.?兩個(gè)集合的交集操作
調(diào)用方法intersection或&進(jìn)行交集操作
集合A.intersection(集合B)/集合A & 集合B
# &在Python集合中是求交集的意思
# 輸出集合A與集合B的交集部分
2.?兩個(gè)集合的并集操作
# 并集定義:一般地,由所有屬于集合A或?qū)儆诩螧的元素組成的集合,稱為集合A與集合B的并集,記作A∪B(讀作“A并B”)
調(diào)用方法union或|進(jìn)行并集操作
集合A.union(集合B)/集合A | 集合B
# |在Python集合中是并集的意思
# 輸出集合A與集合B所有的元素,去掉重復(fù)元素
3.?兩個(gè)集合的差集操作
# 差集定義:設(shè)A,B是兩個(gè)集合,則所有屬于A且不屬于B的元素構(gòu)成的集合,叫做集合A與集合B的差集,記作A-B
調(diào)用方法difference或-進(jìn)行差集操作
集合A.difference(集合B)/集合A-集合B
# -在Python集合中是差集的意思
# 輸出集合A與集合B的差集部分(集合A中的元素-與集合B交集的部分)
4.?兩個(gè)集合的對稱差集操作
# 對稱差集定義:設(shè)A,B是兩個(gè)集合,則集合A與集合B中所有不屬于A與B并集的元素構(gòu)成的集合為集合A與集合B的對稱差集(A∪B)—(A∩B),記作A△B
調(diào)用方法symmetric_difference或^進(jìn)行對稱差集操作
集合A.symmetric_difference(集合B)/集合A^集合B
# ^在Python集合中是對稱差集的意思
# 輸出集合A與集合B的對稱差集(集合A與集合B的并集和集合A與集合B的交集的差集)
5.?集合生成式
# 集合生成式跟列表生成式類似,就是將[]改成{}
5.1.?概念
用于生成集合的公式
5.2.?語法格式
{i*i for i in range(1,10)}
{表示集合元素的表達(dá)式 for 自定義變量 in 可迭代對象}
(4)、列表、元組、字典、集合總結(jié)
Python四種常用的數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)
是否可變
是否重復(fù)
是否有序
定義符號
列表(list)
可變
可重復(fù)
有序
[]
元組(tuple)
不可變
可重復(fù)
有序
()
字典(dict)
可變
key不可重復(fù)
無序
(key:value)
value可重復(fù)
集合(set)
可變
不可重復(fù)
無序
{}
二十三、字符串
(1)、字符串的創(chuàng)建與駐留機(jī)制
1.?字符串
在Python中字符串是基本數(shù)據(jù)類型,是一個(gè)不可變的字符序列
2.?定義(創(chuàng)建)字符串
使用單引號(')、雙引號(")以及三引號進(jìn)行定義
3.?字符串駐留機(jī)制
僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串的駐留池中,Python的駐留機(jī)制對相同的字符串只保留一份拷貝,后續(xù)創(chuàng)建相同字符串時(shí),不會(huì)開辟新空間,而是把該字符串的地址賦給新創(chuàng)建的變量
3.1.?駐留機(jī)制的幾種情況(使用交互模式)
# win+r輸入cmb再輸入py進(jìn)入(PyCharm里Alt+F12再輸入py也可以進(jìn)入)
·?字符串的長度為0或1時(shí)
·?符合標(biāo)識符的字符串?# 有關(guān)標(biāo)識符可在前面第四章找到
·?字符串只在編譯時(shí)進(jìn)行駐留,而非運(yùn)行時(shí)
·?[-5,256]之間的整數(shù)數(shù)字?# 包括256
擴(kuò)展:join()方法:
將序列中的元素以指定的字符連接生成一個(gè)新的字符串
字符串.join(序列)
# 具體在本章(2)中的6.2查看
3.1.1.?sys中的intern方法強(qiáng)制2個(gè)字符串指向同一個(gè)對象
import sys?# 導(dǎo)入sys模塊
變量A=sys.intern(變量B)
3.1.2.?PyCharm對字符串進(jìn)行了優(yōu)化處理
將一些原本不駐留的處理成駐留的
4.?字符串駐留機(jī)制的優(yōu)缺點(diǎn)
·?當(dāng)需要值相同的字符串時(shí),可以直接從字符串池里拿來使用,避免頻繁的創(chuàng)建和銷毀,提升效率和節(jié)約內(nèi)存,因此拼接字符串和修改字符串是會(huì)比較影響性能的。
·?在需要進(jìn)行字符串拼接時(shí)建議使用str類型的join方法,而非+,因?yàn)閖oin()方法是先計(jì)算出所有字符中的長度,然后再拷貝,只創(chuàng)建一次對象,效率要比“+”效率高
(2)、字符串的常用操作
1.?字符串的查詢操作
1.1.?index()
查找子串(substr)第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError
字符串.index(字符串)
1.2.?rindex()
查找子串(substr)最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則拋出ValueError
字符串.rindex(字符串)
1.3.?find()
查找子串(substr)第一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1
字符串.find(字符串)
1.4.?rfind()
查找子串(substr)最后一次出現(xiàn)的位置,如果查找的子串不存在時(shí),則返回-1
字符串.rfind(字符串)
2.?字符串的大小寫轉(zhuǎn)換操作
2.1.?upper()
把字符串中所有字符都轉(zhuǎn)成大寫字母
字符串.upper()
2.2.?lower()
把字符串中所有字符都轉(zhuǎn)成小寫字母
字符串.lower()
2.3.?swapcase()
把字符串中所有大寫字母轉(zhuǎn)成小寫字母,把所有小寫字母都轉(zhuǎn)成大寫字母
字符串.swapcase()
2.4.?capitalize()
把第一個(gè)字符轉(zhuǎn)換為大寫,把其余字符轉(zhuǎn)換為小寫
字符串.capitalize()
2.5.?title()
把每個(gè)單詞的第一個(gè)字符轉(zhuǎn)換為大寫,把每個(gè)單詞的剩余字符轉(zhuǎn)換為小寫
字符串.title()
# 字符串是不可變序列,轉(zhuǎn)換后產(chǎn)生一個(gè)新的字符串對象
3.?字符串內(nèi)容對齊操作
3.1.?center()
居中對齊
字符串.center(整數(shù),字符串)
第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,默認(rèn)是空格,如果設(shè)置寬度小于等于實(shí)際寬度則返回原字符串
3.2.?ljust()
左對齊
字符串.ljust(整數(shù),字符串)
第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,默認(rèn)是空格,如果設(shè)置寬度小于等于實(shí)際寬度則返回原字符串
3.3.?rjust()
右對齊
字符串.rjust(整數(shù),字符串)
第1個(gè)參數(shù)指定寬度,第2個(gè)參數(shù)指定填充符,第2個(gè)參數(shù)是可選的,默認(rèn)是空格,如果設(shè)置寬度小于等于實(shí)際寬度則返回原字符串
3.4.?zfill()
右對齊,左邊用0填充
字符串.zfill(整數(shù))
該方法只接收一個(gè)參數(shù),用于指定字符串的寬度,如果指定的寬度小于等于字符串的長度,返回字符串本身
# zfill()在字符串前有“-”或“+”時(shí),0加在符號右邊
4.?字符串的劈分
4.1.?split()
·?從字符串的左邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表
·?通過參數(shù)sep指定劈分字符串的劈分符
·?通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)作為一部分
字符串.split(sep=字符串,maxsplit=整數(shù))???
# ()里可選,默認(rèn)劈分符和劈分次數(shù),并且sep和maxsplit可以不寫:
字符串.split(字符串,整數(shù))
4.2.?rsplit()
·?從字符串的右邊開始劈分,默認(rèn)的劈分字符是空格字符串,返回的值都是一個(gè)列表
·?通過參數(shù)sep指定劈分字符串的劈分符
·?通過參數(shù)maxsplit指定劈分字符串時(shí)的最大劈分次數(shù),在經(jīng)過最大次劈分之后,剩余的子串會(huì)單獨(dú)作為一部分
字符串.rsplit(sep=字符串,maxsplit=整數(shù))
5.?字符串的判斷操作
5.1.?isidentifier()
判斷指定的字符串是不是合法的標(biāo)識符
字符串.isidentifier()
5.2.?isspace()
判斷指定的字符串是否全部由空白字符組成(回車、換行、水平制表符)
字符串.isspace()
5.3.?isalpha()
判斷指定的字符串是否全部由字母組成
字符串.isalpha()
# 由漢字組成也返回True
5.4.?isdecimal()
判斷指定的字符串是否全部由十進(jìn)制的數(shù)字組成
字符串.isdecimal()
5.5.?isnumeric()
判斷指定的字符串是否全部由數(shù)字(字符)組成
字符串.isnumeric()
# 羅馬數(shù)字,漢字?jǐn)?shù)字等也屬于數(shù)字
5.6.?isalnum()
判斷指定的字符串是否全部由字母和數(shù)字組成
字符串.isalnum()
6.?字符串的替換與合并操作
6.1.?字符串的替換:replace()
字符串.replace(字符串,字符串,整數(shù))
# 整數(shù)參數(shù)可選,默認(rèn)最大次數(shù)
第1個(gè)參數(shù)指定被替換的子串,第2個(gè)參數(shù)指定替換子串的字符串,第3個(gè)參數(shù)指定最大替換次數(shù),該方法返回替換后得到的字符串,替換前的字符串不發(fā)生變化
6.2.?字符串的并合:join()
將列表或元組中的字符串以指定的字符合并成一個(gè)新字符串
字符串.join(序列)
# 序列還可以是字典、集合或字符串,但字典只對鍵進(jìn)行連接,集合是無序的,字符串作為字符串序列
(3)、字符串的比較操作
1.?運(yùn)算符
>,>=,<,<=,==,!=
2.?比較規(guī)則
首先比較兩個(gè)字符串中的第一個(gè)字符,如果相等則繼續(xù)比較下一個(gè)字符,依次比較下去,直到兩個(gè)字符串中的字符不相等時(shí),其比較結(jié)果就是兩個(gè)字符串的比較結(jié)果,兩個(gè)字符串中的所有后續(xù)字符將不再被比較
3.?比較原理
兩個(gè)字符進(jìn)行比較時(shí),比較的是其ordinal value(原始值),調(diào)用內(nèi)置函數(shù)ord可以得到指定字符的ordinal value。與內(nèi)置函數(shù)ord對應(yīng)的是內(nèi)置函數(shù)chr,調(diào)用內(nèi)置函數(shù)chr時(shí)指定ordinal value可以得到其對應(yīng)的字符
ord(字符串)
chr(整數(shù))
4.?==與is的區(qū)別
==比較的是value是否相等
is比較的是id是否相等
(4)、字符串的切片操作
# 索引和切片具體可以到第十九章(4)中的2、3查看
·?字符串是不可變序列
·?不具備增、刪、改等操作
·?切片操作將產(chǎn)生新的對象
字符串[start:end:step]
(5)、格式化字符串
1.?格式化字符串
按一定格式輸出的字符串,實(shí)際上就是一個(gè)字符串的拼接操作
2.?為什么需要格式化字符串
減少內(nèi)存空間浪費(fèi)
3.?格式化字符串的方式
3.1.?%作占位符
定義的格式化字符串%(實(shí)際值,實(shí)際值...)
定義的格式化字符串每個(gè)%的位置與后面的實(shí)際值的位置相對應(yīng)
%s:字符串
%i或%d:整數(shù)
%f:浮點(diǎn)數(shù)
3.2.?{}作占位符
定義的格式化字符串.format(實(shí)際值,實(shí)際值...)
定義格式化字符串每個(gè){}里的數(shù)字與后面實(shí)際值的正向索引相對應(yīng)
# {}未指定索引時(shí),與%方式一樣{}位置與實(shí)際值位置相對應(yīng)
3.3.?Python 3以上的f-string
f定義的格式化字符串
定義格式化字符串{}里填寫實(shí)際值
4.?指定寬度和精度
%[寬度][精度][格式]
{[索引]:[寬度][.精度]}?# {}做占位符時(shí)索引可不寫
[寬度]:總寬度
[精度]:%做占位符里是精確到小數(shù)點(diǎn)后幾位;{}做占位符里是一共幾位數(shù),后面加上f是小數(shù)點(diǎn)后
(6)、字符串的編碼轉(zhuǎn)換
1.?為什么需要字符串的編碼轉(zhuǎn)換
字符串在網(wǎng)絡(luò)當(dāng)中需要使用字節(jié)進(jìn)行傳輸時(shí),需要先轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)進(jìn)行傳輸,再轉(zhuǎn)換成字符串類型進(jìn)行顯示
2.?編碼與解碼的方式
2.1.?編碼
將字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(bytes)
字符串.encode(encoding=編碼格式)
# 編碼格式有GBK,UTF-8等。GBK一個(gè)中文占兩個(gè)字節(jié),UTF-8占三個(gè)字節(jié)
2.2.?解碼
將bytes類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型
二進(jìn)制數(shù)據(jù).decode(encoding=編碼格式)
擴(kuò)展:len()內(nèi)置函數(shù)
返回對象(包括上面介紹的五種數(shù)據(jù)類型等)長度或項(xiàng)目個(gè)數(shù)
len(對象)
# 這里到達(dá)B站20000字上限了,具體內(nèi)容詳見WPS筆記