python中有7種標準數據類型,分別是布爾型、數字型、字符串、元組、列表、字典和集合,根據數據的特色,能夠劃分爲兩大類:不可變數據類型、可變數據類型,見下圖:
git
而不一樣數據類型,內部的組成元素,常常能夠是其餘的數據類型,便可以互相嵌套,見下圖:
算法
布爾型數據也叫布爾值
,只有兩種取值:True
和False
。布爾值有兩種生成方式:api
操做符 | 含義 |
---|---|
== | 等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於等於 |
>= | 大於等於 |
not 5 not 5 and 5 < 1 or 5 > 1 (not 5) and (5 < 1 or 5 > 1) # 加括號()能夠控制運算前後次序
數字型數據分爲三類,其中int
和float
最經常使用:app
三者存在拓展關係:整數 → 浮點數 → 複數,即「不一樣類型混合運算結果是最寬類型」。函數
數字型數據之間,能夠經過運算操做符進行換算,經常使用運算符見下表:ui
運算操做符 | 含義 |
---|---|
x + y | x與y之和 |
x - y | x與y之差 |
x * y | x與y之積 |
x / y | x與y之商 |
x // y | x與y之整數商,即不大於x與y之商的最大整數 |
x % y | x與y之商的餘數,也叫模運算 |
x ** y | x的y次冪,即x^y |
- x | x的負值 |
+ x | x自己 |
# 整數商 9//4 # 模運算,能夠把任意運算,映射到0-3之間 9 % 4 # x的y次冪,有兩種表達方式 pow(2, 3) 2**3
python中的內置函數底層由C語言編寫,運行速度快,推薦優先使用編碼
內置函數 | 含義 |
---|---|
abs(x) | x的絕對值 |
divmod(x, y) | (x//y, x%y), 輸出爲二元組形式 |
pow(x, y) | 與x**y相同 |
round(x, [ndigits]) | 向整數位最靠近的偶數進行四捨五入,保留ndigits位小數 |
max(x1, x2, ...) | 求最大值 |
min(x1, x2, ...) | 求最小值 |
divmod(10, 3) # 輸出爲二元組形式 # 向最靠近的偶數進行四捨五入,目的是想要減小偏差(銀行家算法) round(4.5) round(5.5) # 若對一堆數進行四捨五入,能夠都加一個很是小的數,再用round() round(4.500000000000001)
字符串是用單引號' '
、雙引號" "
、或多引號''' '''
括起來的一個或多個字符串,spa
引號之間能夠相互嵌套,用來表示複雜字符串。.net
轉義字符\
,表示轉義,經常使用在一些字符或符號前面,共同組成新的含義,經常使用的有:
\
:後接符號,表示原來是什麼做用,轉義以後仍是什麼做用,如"
前面加 \
就能打印出"
\n
:表示換行\t
:表示Tab
鍵拓展用法:在字符串的引號前加上r
,就成爲原始字符串,忽略全部轉義字符
a = 'abc\ncde' # \n表示換行 print(a) a = 'abc\tabc' # \t表示Tab鍵 print(a) aa = 'Tom said, \'Let\'s go\'?' # 轉義字符的運用 print(aa) # 打印出轉義字符 bb = '\\' print(bb) # 打印指定格式:三重引號 print('''Dear Tom, I\'m happy to accept your letter. \ Now I\'ll tell you about my plan to my summer vacation. ...... Yours, Xiao Qiang''')
字符串中的編號叫作索引,訪問對象是「單個元素值」;訪問對象是「範圍的數據」就是切片 ,用冒號:鏈接(開始、結束、步長),切片最少1個參數,最多3個參數。
特別注意,索引和切片都是「新生成」,原始數據不發生改變.
a = 'hello world' a[-1] # 取最後一個 a[2:4] # 左閉右開 a[2:6:2] # 跳着取:從2到6,隔1個取一個 a[::-1] # 倒序 b = '123456789' b[::2] # 取奇數 b[1::2] # 取偶數
函數 | 含義 |
---|---|
len(x) | 返回字符串長度 |
str(x) | 把任意類型x字符串化 |
ord(x) | 返回單字符表示的unicode編碼 |
chr(x) | 返回unicode編碼對應的單字符 |
hex(x) | 返回整數x對應十六進制的小寫形式字符串 |
oct(x) | 返回整數x對應八進制的小寫形式字符串 |
eval(x) | 把任意字符串轉化爲表達式並求值 |
a = 'asgasdga sgasg' # 空格也算長度 len(a) a = 'c' ord(a) # 單字符對應的unicode編碼 chr(99) # unicode編碼對應的單字符 eval('4+5')
查找
方法 | 含義 |
---|---|
find() | 查找字符串在另外一字符串指定範圍內首次出現位置,不存在返回-1 |
rfind() | 最後一次出現位置,不存在返回-1 |
index() | 查找字符串在另外一字符串指定範圍內首次出現位置,不存在拋出異常 |
rindex() | 最後一次出現位置,不存在拋出異常 |
count() | 返回一個字符串在另外一個字符串中出現次數 |
s = 'ashuigasgi' s.find('a') s.rfind('8') s.index('h') s.find('9') s.count('0')
分割與拼接
方法 | 含義 | 是否新生成 |
---|---|---|
split() | 指定字符爲分隔符,從字符串左端開始分割成多個字符,返回列表 | 是 |
rsplit() | 從右端開始分割 | 是 |
partition() | 字符串分割成3部分:分割符前的字符串、分隔符字符串、分隔符後的字符串 | 是 |
rpartition() | 從右端開始分割 | 是 |
join() | 將字符串列表拼接成字符串,並在相鄰字符串直接插入指定字符 | 是 |
+ | 拼接字符串 | 是 |
* | 複製字符串 | 是 |
s = 'apple, peach, banana, peach, pear' s.split(',') # 用什麼分割 s.split(',', 2) # 分割幾回 s.partition('peach') x = ['apple', 'peach', 'banana', 'peach', 'pear'] '/'.join(x) ' '.join(x) # 用空格拼接 a = '123' b = 'abc' a+b a*3
大小寫
方法 | 含義 | 是否新生成 |
---|---|---|
lower() | 返回字符串的副本,所有字符串小寫 | 是 |
upper() | 返回字符串的大寫副本 | 是 |
capitalize() | 將字符串首字母大寫 | 是 |
title() | 將每一個單詞的首字母大寫 | 是 |
swapcase() | 大小寫互換 | 是 |
s = 'Apple,Peach,Banana,Peach,Pear' s.lower() # 所有小寫 s.upper() # 所有大寫 s = 'apple,peach,banana,peach,pear' s.capitalize() # 字符串首字母大寫 s.upper() # 每一個單詞首字母大寫 s.swapcase() # 大小寫互換
判斷
方法 | 含義(判斷字符串) |
---|---|
isdigit() | 是否只由數字組成 |
isalpha() | 是否只由字母組成 |
isalnum() | 是否只由數字或字母組成 |
isupper() | 全部字母是否爲大寫 |
islower() | 全部字母是否爲小寫 |
isspace() | 是否只由空白字符組成 |
istitle() | 是否單詞首字母都是大寫,且後面都是小寫 |
isdecimal() | 是否只包含十進制字符 |
isnumeric() | 是否全部字符都是數字 |
isprintable() | 是否全部字符均可以打印 |
in | 在…內 |
not in | 不在…內 |
判斷的返回值都是True 或 False
a = 'hello world' 'hu' not in a x = ' ' x.isspace() s = 'Apple PeacH' s.istitle()
移除空白字符串
方法 | 含義 | 是否新生成 |
---|---|---|
strip() | 移除左右兩側指定的字符,不指定默認移除空格 | 是 |
lstrip() | 移除左側指定的字符,不指定默認移除空格 | 是 |
rstrip() | 移除右側指定的字符,不指定默認移除空格 | 是 |
s = ' abcd ' s.strip() # 不指定,默認移除空格 s = '****abcd******' s.strip('*') # 指定 s = ' abcd ' s.lstrip() # 移除左邊 s.rstrip() # 移除右邊
對齊文本
方法 | 含義 | 是否新生成 |
---|---|---|
ljust() | 返回左對齊的字符串,並使用指定長度的填充符號,不指定默認使用空格 | 是 |
rjust() | 返回右對齊的字符串,並使用指定長度的填充符號,不指定默認使用空格 | 是 |
center() | 返回居中對齊的字符串,並使用指定長度的填充符號,不指定默認使用空格 | 是 |
s = 'abjd' s.ljust(10) s.center(10, '*')
映射
方法 | 含義 |
---|---|
maketrans() | 生成字符串映射表 |
translate() | 按映射表關係轉換字符串 |
二者通常配對使用
s1 = 'abcde' # 原字符串中要替換的字符 num = '12345' # 相應的映射字符的字符串。 s2 = 'aaxxbbxxccxxddxxee' # 原字符串 hah = s1.maketrans(s1, num) hah s2.translate(hah)
其餘方法
方法 | 含義(判斷字符串) | 是否新生成 |
---|---|---|
replace() | 用指定字符串替代原字符串,並返回替換後的新字符串 | 是 |
startswith() | 判斷字符串:是否以指定字符串開頭,並能夠指定範圍,返回布爾值 | / |
endswith() | 判斷字符串:是否以指定字符串結尾,並能夠指定範圍,返回布爾值 | / |
zfill() | 在字符串左側用0填充至指定長度,並返回補齊後的字符串 | 是 |
encode() | 以指定編碼格式對字符串進行編碼,返回編碼後的二進制 | / |
decode() | 對編碼後的字符串進行解碼 | / |
s = 'aaxxbbxxccxxddxxee' # 原字符串 s.replace('xx', 'oo') s.replace('ff', 'oo') # 若是不存在,返回原字符串 s = 'apple,peach,banana,peach,pear' s.startswith('a') # 是否是以a開頭 s.startswith('apple') # 是否是以apple開頭 s.startswith('peach', 6) # 判斷單詞是否是從第i個開始 s = 'apple' s.zfill(10) s = '中國' s1 = s.encode('utf-8') # utf8編碼 s1 s1.decode() # 編碼
format格式化
爲了將其餘類型數據類型轉換爲字符串,須要進行格式化,經過format()
方法實現,有三種常見形式:
格式化方法 | 語法形式 |
---|---|
按從左到右傳值 | "字符串 - {} -字符串- {}".format("內容1", "內容2") |
按指定位置傳值 | "字符串 - {2} -字符串- {1}".format("內容1", "內容2") |
按設置參數傳值 | "字符串 - {變量名1} -字符串- {變量名2}".format(變量名1="內容1", 變量名2="內容2") |
# 按默認順序對字符串進行格式化 s = "I'm dark {}, I'm {} years old!" s1 = s.format('knight', '28') print(s1) # 按位置對字符串進行格式化 s = "I'm dark {1}, I'm {0} years old!" s1 = s.format('28', 'knight') print(s1) # 按參數設置對字符串進行格式化 s = "I'm dark {name}, I'm {age} years old!" s1 = s.format(age='28', name='knight') print(s1)
format格式控制
format
除了能夠進行字符串格式化之外,還能夠對字符串進行「格式控制」,使得字符串呈現不一樣的表現形式,語法:{ <參數序號> : <格式控制標記> }。
其中, <格式控制標記> 用來控制參數顯示的格式,包括: <填充> <對齊> <寬度> ,<.精度> <類型> 6 個字段,這些字段都是可選的,能組合使用。
更多用法,可參見連接: https://blog.csdn.net/i_chaoren/article/details/77922939
s = 'dark knight' '{0:20}'.format(s) # 默認左對齊 '{0:>30}'.format(s) # >表示右對齊 '{0:^30}'.format(s) # ^表示居中對齊 '{0:*^30}'.format(s) # 指定填充符號 '{0:*^30,}'.format(123456789) # 用逗號顯示數字類型的千位分隔符 '{0:.2f}'.format(123.456789) # 指定浮點數精度 '{0:.2f}, {1:.4f}'.format(1/3, 5/7) # 不一樣位置取不一樣精度
元組,外層用括號()
包裹,裏面元素用逗號分割的數據類型,如(1, 2)
,它是一種有序序列。
注意,元組外層的()
也能夠不寫,如1, 2
也是元組,等價於(1, 2)
。
融化與凍結,實質就是元組和列表的相互轉化
list()
tuple
a = (1, 2, 3, 4) list(a) # 融化,元組變列表 b = [5, 6, 7, 8] tuple(b) # 凍結,列表變元組
同字符串、列表的索引切片,邏輯同樣
t = (1, 'aa', {'abc': 123, 'cde': 789, 'efg': [11, 22, 33]}) t[2]['efg'][1]
一次給多個變量賦值的方法叫序列解包,經常使用的序列解包方法有:
a, b = [1, 2] # 列表的序列解包 a b # a, b = 4, 5 # 這也是元組的序列解包 t1, t2 = (4, 5) # 元組的序列解包 t1 t2 c, d = 'sd' # 字符串的序列解包 c d e, f = range(2) # 內置對象的序列解包 e f x, y = map(str, range(2)) # 內置對象的序列解包 x y
和列表推導式相似,只是保存的是算法,且最外層用的是(),用法詳見列表推導式
方法 | 含義 | 形式 |
---|---|---|
列表推導式 | 保存元素,直接輸出 | [ ] |
字典推導式 | 保存元素,直接輸出 | { } |
生成器表達式 | 保存算法,元素用 .__next__() 或for循環訪問 | ( ) |
[i for i in range(10) if i % 2 == 0] # 列表推導式——保存的是元素 (i for i in range(10) if i % 2 == 0) # 生成器表達式——保存的是算法 # 通常是逐個訪問生成器表達式的元素,在計算的時候,用for循環逐個讀出來 g = (i for i in range(10) if i % 2 == 0) g.__next__() g.__next__() g.__next__() # 用for循環逐個訪問生成器表達式中的元素 g = (i for i in range(10) if i % 2 == 0) for i in g: print(i) # 生成器表達式中的元素訪問一次後就會失效,要想屢次重複訪問,就得從新生成生成器表達式 h = (i**2 for i in range(10)) 4 in h # 第一次訪問 4 in h # 第二次訪問