python 數據類型與運算符

一、運算符

算術運算

+ 加
- 減
* 乘
/ 除
% 取余(相除后的余數)
** 取冪(注意 ^ 并不執行該運算,你可能在其他語言中見過這種情形)
// 相除后向下取整到最接近的整數

按位運算

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時1個半月,我把自己學習Python基礎知識的框架詳細梳理了一遍。 ...
    Raxxie閱讀 19,025評論 17 410
  • 本文為《爬著學Python》系列第九篇文章。 從現在開始算是要進入“真刀真槍”的Python學習了。之所以這么說,...
    SyPy閱讀 2,159評論 0 14
  • 第六章:數字 第七章:序列,列表,元組 1.序列 序列類型有著相同的訪問模式:它的每一個元素可以通過指定一個偏移量...
    m風滿樓閱讀 913評論 0 2
  • 今天的文章是說創業者,但實際更多的,是想表達對那些堅持自己道路,并勇往直前的人。他們,是值得敬佩的。 陳強尼,這個...
    黑黑黑黑黑創閱讀 1,352評論 0 0
  • 晚上8點和表弟一起校稿,等我把發現和質疑的錯誤及不當之處給他一一指出并修改完,已經快12點了。從茶社出來一身...
    七月紫蘇閱讀 130評論 1 0