一、運算符
算術運算
+ 加
- 減
* 乘
/ 除
% 取余(相除后的余數)
** 取冪(注意 ^ 并不執行該運算,你可能在其他語言中見過這種情形)
// 相除后向下取整到最接近的整數
按位運算
x << y 左移Y位
3<<2:解法:11向左移動兩位變為1100,即12 .
x >> y 右移Y位
3>>2:解法:11向右移動兩位變為0.
x & y 按位與,都為1為1,否則為0
3&5 :解法:3的二進制補碼是 11, 5的是101, 3&5也就是011&101,先看百位(其實不是百位,這樣做只是便于理解) 一個0一個1,根據(1&1=1,1&0=0,0&0=0,0&1=0)可知百位應該是1,同樣十位上的數字1&0=0,個位上的數字1&1=1,因此最后的結果是1
x | y 按位或,都為0為0,否則為1
4|7: 解法:按位并的計算規律和按位與的很相似,只不過換了邏輯運算符,并的規律是: 1|1=1 ,1 |0=1, 0|0=0\. 4|7轉換位二進制就是:100|111=111\. 二進制111即為十進制的7.小技巧:利用按位并可以將任意二進制數的最后一位變為1,即就是X|1.
~ x 按位取反,方法: 將二進制數+1之后乘以-1,x的按位翻轉是-(x+1) . 注意,按位運算符是單目運算符.
~3 :解法:3的二進制是11, -(11+1)=-100B=-4D. (注:B和D分別表示二進制和十進制).
x ^ y 按位異或,對位相加,特別要注意的是不進位
1^1:解法:1+1=0.(本來二進制1+1=10,但不能進位,所以結果是0)
賦值運算符
=
所有單目運算符加上=
比較運算符
符號使用情況 布爾型 運算符
5 < 3 False 小于
5 > 3 True 大于
3 <= 3 True 小于或等于
3 >= 5 False 大于或等于
3 == 5 False 等于
3 != 5 True 不等于
邏輯運算符
邏輯使用情況 布爾型 運算符
5 < 3 and 5 == 5 False and - 檢查提供的所有語句是否都為 True
5 < 3 or 5 == 5 True or - 檢查是否至少有一個語句為 True
not 5 < 3 True not - 翻轉布爾值
恒等運算符
關鍵字 | 運算符 |
---|---|
is | 檢查兩邊是否恒等 |
is not | 檢查兩邊是否不恒等 |
二、數據類型
Number 數字類型
Number可以用到兩種 python 數據類型:
int - 表示整數值
float - 表示小數或浮點數值
常用數字函數:
函數 | 返回值 |
---|---|
abs(x) | 返回數字的絕對值,如abs(-10) 返回 10 |
ceil(x) | 返回數字的上入整數,如math.ceil(4.1) 返回 5exp(x) 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回數字的絕對值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回數字的下舍整數,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10為基數的x的對數,如math.log10(100)返回 2.0 |
max(x1, x2,...) | 返回給定參數的最大值,參數可以為序列。 |
min(x1, x2,...) | 返回給定參數的最小值,參數可以為序列。 |
modf(x) | 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。 |
pow(x, y) | x**y 運算后的值。 |
round(x [,n]) | 返回浮點數x的四舍五入值,如給出n值,則代表舍入到小數點后的位數。 |
sqrt(x) | 返回數字x的平方根。 |
Bool 布爾類型
True 為真
False 為假
非0都為True
0為假
可以與Number類型進行強制轉換,特別注意,要寫布爾類型時,務必不要帶引號,“True”是字符串類型,True才是布爾型。
String 字符串類型
String用到的python數據類型:
str
可以使用雙引號 " 或單引號 ' 定義字符串。
String運算
假設a = Hello,b = Python
操作符 | 描述 | 實例 |
---|---|---|
+ | 字符串連接 | a + b 輸出結果: HelloPython |
* | 重復輸出字符串 | a*2 輸出結果:HelloHello |
[] | 通過索引獲取字符串中字符 | a[1] 輸出結果 e |
[ : ] | 截取字符串中的一部分,含頭不含尾 | a[1:4] 輸出結果 ell |
in | 成員運算符 - 如果字符串中包含給定的字符返回 True | 'H' in a 輸出結果 1 |
not in | 成員運算符 - 如果字符串中不包含給定的字符返回 True | 'M' not in a 輸出結果 1 |
String內常用轉義字符
轉義字符 | 描述 |
---|---|
\ (在行尾時) | 續行符 |
\ \ | 反斜杠符號 |
\ ' | 單引號 |
\ " | 雙引號 |
\ b | 退格(Backspace) |
\ n | 換行 |
\ r | 回車 |
\ f | 換頁 |
\ oyy | 八進制數,yy代表的字符,例如:\o12代表換行 |
\ xyy | 十六進制數,yy代表的字符,例如:\x0a代表換行 |
String常用方法
方法 | 功能 |
---|---|
capitalize() | 將字符串的第一個字符轉換為大寫 |
count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數 |
find(str, beg=0 end=len(string)) | 檢測 str 是否包含在字符串中,如果指定范圍 beg 和 end ,則檢查是否包含在指定范圍內,如果包含返回開始的索引值,否則返回-1 |
join(seq) | 以指定字符串作為分隔符,將 seq 中所有的元素(的字符串表示)合并為一個新的字符串 |
len(string) | 返回字符串長度 |
lower() | 轉換字符串中所有大寫字符為小寫. |
lstrip() | 截掉字符串左邊的空格或指定字符。 |
max(str) | 返回字符串 str 中最大的字母。 |
min(str) | 返回字符串 str 中最小的字母。 |
replace(old, new [, max]) | 把 將字符串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次。 |
rstrip() | 刪除字符串字符串末尾的空格. |
split(str="", num=string.count(str))num=string.count(str)) | 以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num 個子字符串 |
strip([chars]) | 在字符串上執行 lstrip()和 rstrip() |
swapcase() | 將字符串中大寫轉換為小寫,小寫轉換為大寫 |
title() | 返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle()) |
upper() | 轉換字符串中的小寫字母為大寫 |
List列表類型
list 使用方括號創建列表
- 使用列表的索引對列表的項進行查看與更新,注意是從0開始計數的,列表第一項索引為0,還可以使用復數進行索引,-1代表倒數第一項。
例:
>>> lst_of_random_things = [1, 3.4, 'a string', True]
>>> lst_of_random_things[1]
3.4
>>> lst_of_random_things[-1]
True
- 列表也可進行切片操作,類似字符串切片,含頭不含尾,負數同樣代表倒數第幾項。
例:
>>> lst_of_random_things = [1, 3.4, 'a string', True]
>>> lst_of_random_things[1:2]
[3.4]
>>> lst_of_random_things[:2]
[1, 3.4]
>>> lst_of_random_things[1:]
[3.4, 'a string', True]
>>> lst_of_random_things[-1:]
[True]
注意到上面,索引時,取一項是個變量,切片時即使取一項,也是個列表。
列表運算
Python 表達式 | 結果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 長度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 組合 |
max([1,2,3]),min([1,2,3]) | 3,1 | 最大,最小 |
['Hi!'] * 4 | ['Hi!', 'Hi!', 'Hi!', 'Hi!'] | 重復 |
3 in [1, 2, 3] 或1 not in [1,2,3 ] | True False | 元素是否存在于列表中 |
for x in [1, 2, 3]: print(x, end=" ") | 1 2 3 | 迭代 |
列表方法
方法 | 功能描述 |
---|---|
list.append(obj) | 在列表末尾添加新的對象 |
list.count(obj) | 統計某個元素在列表中出現的次數 |
list.extend(seq) | 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表) |
list.index(obj) | 從列表中找出某個值第一個匹配項的索引位置 |
list.insert(index, obj) | 將對象插入列表 |
list.pop(obj=list[-1]) | 移除列表中的一個元素(默認最后一個元素),并且返回該元素的值 |
list.remove(obj) | 移除列表中某個值的第一個匹配項 |
list.reverse() | 反向列表中元素 |
list.sort([func]) | 對原列表進行排序 |
list.clear() | 清空列表 |
list.copy() | 復制列表 |
"str".join(list) | 將列表項用str連接起來 |
Tuple元組類型
tuple 常用小括號,不過小括號是可選選項,如果小括號并沒有對解釋代碼有影響,程序員經常會忽略小括號
元組同list列表,是有序存儲的對象集合,可以用索引查找,但是與列表不同的是,元組不可變,你無法向元組中添加項目或從中刪除項目,或者直接對元組排序。
修改元素是非法的,但可以進行+,*,for,in的運算
刪除元素是非法的,只能刪除整個元組
元組還有個特性叫元組解包,還可用*來解包,如下:
dimensions = 52, 40, 100
length, width, height = dimensions
print("The dimensions are {} x {} x {}".format(length, width, height))
例二:
a = 1,2,3
print(*a)
#輸出
1 2 3
#如果直接輸出a應該是(1,2,3)
Set集合類型
集合是一個包含唯一元素的可變無序集合數據類型。集合的一個用途是快速刪除列表中的重復項。
set()或者{}來表示
集合和列表一樣支持 in 運算符。和列表相似,你可以使用 add 方法將元素添加到集合中,并使用 pop 方法刪除元素。但是,當你從集合中拿出元素時,會隨機刪除一個元素。注意和列表不同,集合是無序的,因此沒有“最后一個元素”。
Set集合常用操作舉例
如圖理解
1》交集
>>> x={1,2,3,4}
>>> y={3,4,5,6}
>>> x
set([1, 2, 3, 4])
>>> y
set([3, 4, 5, 6])
>>> x&y
set([3, 4])
>>> x.intersection(y)
set([3, 4])
2》并集
>>> x | y #集合并集
set([1, 2, 3, 4, 5, 6])
>>> x.union(y)
set([1, 2, 3, 4, 5, 6])
3》差集
>>> x-y # x與y的差集
set([1, 2])
>>> x.difference(y)# x與y的差集
set([1, 2])
>>> y-x # y與x的差集
set([5, 6])
>>> y.difference(x)# y與x的差集
set([5, 6])
4》對稱差集
>>> x^y
set([1, 2, 5, 6])
>>> y^x
set([1, 2, 5, 6])
>>> x.symmetric_difference(y)
set([1, 2, 5, 6])
>>> y.symmetric_difference(x)
set([1, 2, 5, 6])
5》集合的子集和超集
>>> x
set([1, 2, 3, 4])
>>> z
set([1, 2, 3])
>>> z.issubset(x)#z是x的子集
True
>>> x.issuperset(z)#x是z的超集
True
Dictionary 字典
字典是存儲的是唯一鍵到值的映射,鍵不能重復!如果給重復的鍵賦值,只會保留最后一次賦值的值。另外鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行。
我們可以像檢查某個值是否在列表或集合中一樣,使用關鍵字 in 檢查值是否在字典中。
dict 常用大括號{key:value}表示(注意如果沒有key:value則為set)
操作
- 訪問字典的值:通過鍵索引
- 修改字典的值:通過建索引
- 刪除字典元素,del 字典名[鍵索引]
- 清空字典,字典名.clear()
- 刪除字典,del 字典名
字典Dict方法
方法 | 功能描述 |
---|---|
radiansdict.get(key, default=None) | 返回指定鍵的值,如果值不在字典中返回default值 |
radiansdict.items() | 以列表返回可遍歷的(鍵, 值) 元組數組 |
radiansdict.keys() | 以列表返回一個字典所有的鍵 |
radiansdict.setdefault(key, default=None) | 和get()類似, 但如果鍵不存在于字典中,將會添加鍵并將值設為default |
radiansdict.update(dict2) | 把字典dict2的鍵/值對更新到dict里 |
radiansdict.values() | 以列表返回字典中的所有值 |
pop(key[,default]) | 刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。 |
popitem() | 隨機返回并刪除字典中的一對鍵和值(一般刪除末尾對)。 |
三、可變性與不可變性
可變性是指對象創建完畢后,我們是否可以在原內存下更改該對象。如果對象(例如列表或字符串)可以更改(地址不變的情況下,修改內容),則是可變的。但是,如果無法更改對象以創建全新的對象(必須新生成一塊內存來存修改后的值,例如字符串),則該對象是不可變的。
可變:list,dict
不可變:int,string,float,tuple
可變例子:
def dict_test():
a = {}
b = a
print(id(a))
a['a'] = 'hhhh'
print('id a:' + str(id(a)))
print('a:' + str(a))
print('id b:' + str(id(b)))
print('b:' + str(b))
if __name__ == '__main__':
dict_test()
輸出:
140367329543360
id a:140367329543360
a:{'a': 'hhhh'}
id b:140367329543360
b:{'a': 'hhhh'}
如圖:
不可變例子:
def int_test():
i = 77
j = 77
print(id(77)) #140396579590760
print('i id:' + str(id(i))) #i id:140396579590760
print('j id:' + str(id(j))) #j id:140396579590760
print i is j #True
j = j + 1
print('new i id:' + str(id(i))) #new i id:140396579590760
print('new j id:' + str(id(j))) #new j id:140396579590736
print i is j #False
if __name__ == '__main__':
int_test()
如圖:
特別注意:
在 python 中,類型屬于對象,變量是沒有類型的:
a=[1,2,3]
a="Runoob"
以上代碼中,[1,2,3] 是 List 類型,"Runoob" 是 String 類型,而變量 a 是沒有類型,她僅僅是一個對象的引用(一個指針),可以是 List 類型對象,也可以指向 String 類型對象。
四、有序和無序
有序:list,tuple
無序:dict,set