1. 程式人生 > >python學習筆記(二):python數據類型

python學習筆記(二):python數據類型

指定位置 com 增刪 tab 邏輯與 reverse 小數類型 一個表 fas

上一篇博客寫了python的入門和簡單流程控制,這次寫python的數據類型和各種數據類型的內置方法。
一、數據類型是什麽鬼?
計算機顧名思義就是可以做數學計算的機器,因此,計算機程序理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的數據,不同的數據,需要定義不同的數據類型。
二、整形和浮點型
整形也就是整數類型(int)的,在python3中都是int類型,沒有什麽long類型的,比如說存年齡、工資、成績等等這樣的數據就可以用int類型,有正整數、負整數和0,浮點型的也就是小數類型(folat)的,帶小數點的

age = 18
b = -50
c 
= 5.222

三、布爾類型
什麽是布爾類型,布爾類型就是真和假,只有這兩種,True和Fasle,非真即假,除了True和False還有0和1,非0即真

a = True
b = False

四、字符串和字符串操作
上面說了存數字,那要是想存自己的名字呢,那用int類型的就不行了,不能一個人的名字叫數字吧,這樣怎麽辦呢,就有另一種數據類型應運而生,就是字符串,它可以存任意類型的字符串,比如名字,一句話等等。

name = hanzhao
msg = Welcome to my blog.

字符串還有很多內置的方法,對字符串進行操作,常用的方法如下,下面註釋帶有是否的,返回的都是一個布爾值:

name = my \t name is {name},age is {age}.
print(name.capitalize())#大寫
print(name.center(50,-))#50個-,把name放中間
print(name.endswith(u))#是否以x結尾
print(name.expandtabs(30))#補\t的次數
print(name.find(n))#查找字符串的索引       print(name.format(name=‘niuniu‘,age=18))#這個是格式字符串,再第一節的博客裏面已經寫了
print(name.format_map({
name:niuniu,age:19}))#這個也是格式化字符串,後面跟的是一個字典,字典在後面也會寫 print(abA123.isalnum())#是否包含數字和字母 print(abA.isalpha())#是否是英文字母 print(122.isdigit())#是否是數字 print(aa.isidentifier())#是否是一個合法的變量名 print(aa.islower())#是否是小寫字母 print(AA.isupper())#是否是大寫字母 print(Loadrunner Book.istitle())#是不是一個標題,判斷首字母是否大寫 print(+.join([hehe,haha,ee]))#拼接字符串 print(name.lower())#變成小寫 print(name.upper())#變成大寫 print(\nmysql \n.lstrip())#默認去掉左邊的空格和換行 print(\nmysql \n.rstrip())#默認去掉右邊的空格和換行 print(\nmysql \n.strip())#默認去掉兩邊邊的空格和換行 #下面是反解 new_p = str.maketrans(1234567,abcdefg) print(cc ae gg.translate(new_p)) print(mysql is db..replace(mysql,oracle,1))#替換字符串 print(mysql is is db.rfind(is))#返回最右邊字符的下標 print(1+2+3+4.split(+))#切割字符串,返回一個list print(1+2+3\n1+2+3+4.splitlines())#按照換行符分割 print(Abcdef.swapcase())#大小寫反轉 p = str.maketrans(abcdefg,1234567)#前面的字符串和後面的字符串做映射 print(cc ae gg.translate(p))#輸出按照上面maketrans做映射後的字符串

五、列表和列表操作
上面說了字符串和整形,那現在要是想存一個班級的人的名字,這個班有200個人,怎麽存呢,用字符串的話,那就是names = ‘marry lily king .....‘這樣,但是這樣存是可以存,那要是想取到某個人的名字怎麽取呢,不能再去裏面看一遍吧,那累死人了,為了解決這個問題,又有一種新的數據類型應運而生,那就是列表,這也是我們在以後的開發過程中,最常用的數據類型之一,列表也叫數組,列表定義,使用[]即可;列表裏面可以再套列表,一個裏面套一個列表,叫二維數組;一個裏面套一個列表,裏面的列表再套一個列表,這個叫三維數組,套幾層就是幾維,定義格式如下:

list1 = [1,2,3,4] #一個普通的數組
list2 = [marry,lily,[50,monkey]] #二維數組
list3 = [name,sex,[lily,124,[aaaa,bbb]]] #三維數組

通過下標訪問列表中的元素,下標從0開始計數,也就是說,比如說一個列表,有個5元素,那麽它第一個元素下標就是0,第二個就是1,以此類推,字符串也有下標,和列表一樣 對列表的操作,分以下幾種增、刪、改、查

#
msg = 你好
name = [andashu,cc,hz]
name.append(msg)#從最後面開始插入
name.insert(1,msg) #從指定位置插入,這個1代表下標            
print(name)
#
msg = 你好
name = [andashu,cc,hz]
name.remove(baby)#刪除指定的值
del name[0]#刪除指定位置的值
name.pop()#不傳入下標的話,刪除最後一個值,傳入下標刪除指定位置的值
name.clear()#清空列表
#
msg = 你好
name = [andashu,cc,hz]
name[1] = baby #修改指定位置的值
#
msg = 你好
name = [andashu,cc,hz]
print(name[0])#獲取第一個元素
print(name[-1])#-1代表最後一個元素

列表操作,一些內置的方法:

msg = 你好
name = [andashu,cc,hz]
name2 = [1,2,3,4,[hehe,haha]]
print(name.index(cc))#取索引
print(name.count(cc))#取cc出現的次數
name.clear()#清空列表
print(name.sort())#排序,根據阿斯克碼來排序
name.extend(name2)#擴展列表,也就是把name2的值加到name裏面
name.reverse()#反轉數組,會改變原數組的值

切片

切片也就是另一種方式獲取列表的值,它可以獲取多個元素,可以理解為,從第幾個元素開始,到第幾個元素結束,獲取他們之間的值,格式是name:[1:10],比如說要獲取name的第一個元素到第五個元素,就可以用name[0:6],切片是不包含後面那個元素的值的,記住顧頭不顧尾前面的下標如果是0的話,可以省略不寫,這樣寫,name[:6],切片後面還有可以寫一個參數,叫做步長,也就是隔多少個元素,取一次,默認可以不寫,也就是隔一個取一次,切片操作也可以對字符串使用,和列表的用法一樣,實例如下:

names = [andashu,cc,niuniu,amy,lily]
names[1:4]  #取下標1至下標4之間值,包括1,不包括4
names[1:-1] #取下標1至-1的值,不包括-1
names[0:3] #取下標0至3的值,不包括3
names[:3] #取下標0至3的值,不包括3,和上面的效果一樣,0可以省略不寫
names[2:]#取從第二個下標開始的後面所有元素
#下面是加上步長的
nums = [1,2,3,4,5,6,7,8,9,10]
nums[::2]#這個代表取所有的元素,然後每隔2個元素取一個
>>> 1 3 5 7 9 #輸出的結果
nums[1:8:3]#代表取第二個元素開始,到第八個結束,隔3個取一次
>>>[2,5] #輸出結果

六、元組
元組其實和列表一樣,不一樣的是,元組的值不能改變,一旦創建,就不能再改變了,比如說,要存數據庫的連接信息,這個連接信息在程序運行中是不能被改變的,如果變了那數據庫連不上了,就程序就完犢子了,這樣的就可以使用元組了,元組呢,也提示別人,看到是元組的話,就說明這個值是不能被改變的,元組的定義方式是用(),小括號;元組只有兩個方法,那就是count和index

mysql_coon = (192.168.1.109,root,123456,3306,my_db)#定義元組

七、字典
上面說了,整形、浮點型、字符串、列表和元組,下面說個新的數據類型,字典,字典也是我們開發過程中最常用的一種數據類型;想一個問題,現在要存整個北京市的所有人的信息,每個人有姓名、年齡、性別、家庭住址、學歷等等,那要是用列表存的話,那就得定義N多個數組,然後存上每個人的信息,那累死人了。。。這時候又有一種新的數據類型出現了,那就是字典,dict,全稱是dictionary,它具有極快的查找速度;字典是一種key-value的數據類型,比如說要存每個人的信息,那麽每個人的編號就是key,value就是每個人的信息,這樣的話,一個字典就能存所有人的信息了。字典的定義使用{},大括號,每個值用“,”隔開,key和value使用“:”分隔。
舉個列子,如果用列表存每個人的信息的話,需要用兩個列表,一個存人名,一個存信息:

names = [marry,amy,lily]
infos = [[18,18612512981,北京],[20,18612512991,山東],[25,18612532981,河南]]

給一個名字,如果要查他的對應信息,那就要先從names裏面找到它的位置,然後再從infos中找到它的信息,如果這個列表越長,那麽它的查詢速度越慢。
如果用字典實現的話,只需要一個名字和信息對應的一個表,這樣就很快的根據名字找到它對應的信息,無論這個表有多大,查找速度都不會變慢。

infos = {marry:[18,18612512981,北京],amy:[20,18612512991,山東],lily:[25,18612532981,河南]}
infos[marry] #取marry的信息

為什麽dict查找速度這麽快?因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中查找元素的方法,list越大,查找越慢。
第二種方法是先在字典的索引表裏(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種查找速度都非常快,不會隨著字典大小的增加而變慢,這種就是字典的實現方式。
字典的特性:
字典是無序的,因為它沒有下標,用key來當索引,所以是無序的
字典的key必須是唯一的,因為它是通過key來進行索引的,所以key不能重復,天生就去重
字典的增刪改查:

#
infos = {marry:[18,18612512981,北京],amy:[20,18612512991,山東],lily:[25,18612532981,河南]}
infos[andy]=[22,18712512981,河北]#增加
#
infos = {marry:[18,18612512981,北京],amy:[20,18612512991,山東],lily:[25,18612532981,河南]}
infos.pop(marry)#標準的刪除方法
del infos[marry]#使用del方法刪除
info.popitem() #隨機刪除一個值
#
infos = {marry:[18,18612512981,北京],amy:[20,18612512991,山東],lily:[25,18612532981,河南]}
infos[marry]=[38,18612512981,北京]
#
infos = {marry:[18,18612512981,北京],amy:[20,18612512991,山東],lily:[25,18612532981,河南]}
infos.get(maryy)#獲取marry的信息,這種方式如果key不存在的話,會返回None
infos[marry]#獲取marry的信息,這種方式如果key不存在的話,會報錯
marry in infos #判斷marry是否在這個字典中,返回True或者False

字典的內置方法:

dic = {stu1:cc,stu2:andashu,stu3:niuniu}
print(dic.values())#打印所有value
print(dic.keys())#打印所有的key
print(dic.setdefault(stu1,fengluo))#如果這個key存在的話,那就不動它,不存在的話,添加一個
dic2 = {stu1:sriba,stu10:baidu}
dic.update(dic2)#更新字典值,如果key存在的話,就更新,不存在的話就添加
print(dic.items())#字典轉換成一個list

循環字典:

dic = {stu1:cc,stu2:andashu,stu3:niuniu}
for k in dic:
print(k,dic[k])#打印key和value的值,推薦使用這種方式,速度快
for k,v in dic.items():
print(k,v)#打印key和value的值,這種方式不推薦,因為會把字典轉換成列表,效率不高

八、數據運算
算數運算符

操作符 描述 例子
+ 加法 - 對操作符的兩側增加值 a + b = 30
- 減法 - 減去從左側操作數右側操作數 a - b = -10
* 乘法 - 相乘的運算符兩側的值 a * b = 200
/ 除 - 由右側操作數除以左側操作數 b / a = 2
% 模 - 由右側操作數和余返回除以左側操作數 b % a = 0
** 指數- 執行對操作指數(冪)的計算 a**b = 10 的冪 20
// 地板除 - 操作數的除法,其中結果是將小數點後的位數被除去的商 9//2 = 4 而 9.0//2.0 = 4.0

比較運算符

運算符 描述 實例
== 檢查兩個操作數的值是否相等,如果是則條件變為真 (a == b) 為false
!= 檢查兩個操作數的值是否相等,如果值不相等,則條件變為真 a != b) 為 true.
> 檢查左操作數的值是否大於右操作數的值,如果是,則條件成立 (a > b) 不為 true.
< 檢查左操作數的值是否小於右操作數的值,如果是,則條件成立 (a < b) 為 true.
>= 檢查左操作數的值是否大於或等於右操作數的值,如果是,則條件成立 (a >= b) 不為 true.
<= 檢查左操作數的值是否小於或等於右操作數的值,如果是,則條件成立 (a <= b) 為 true.

Python賦值運算符

運算符 描述 示例
= 簡單的賦值運算符,賦值從右側操作數左側操作數 c = a + b將指定的值 a + b 到 c
+= 加法AND賦值操作符,它增加了右操作數左操作數和結果賦給左操作數 c += a 相當於 c = c + a
-= 減AND賦值操作符,它減去右邊的操作數從左邊操作數,並將結果賦給左操作數 c -= a 相當於 c = c - a
*= 乘法AND賦值操作符,它乘以右邊的操作數與左操作數,並將結果賦給左操作數 c *= a 相當於 c = c * a
/= 除法AND賦值操作符,它把左操作數與正確的操作數,並將結果賦給左操作數 c /= a 相當於c = c / a
%= 模量AND賦值操作符,它需要使用兩個操作數的模量和分配結果左操作數 c %= a 相當於 c = c % a
**= 指數AND賦值運算符,執行指數(功率)計算操作符和賦值給左操作數 c **= a 相當於 c = c ** a
//= 地板除,並分配一個值,執行地板除對操作和賦值給左操作數 c //= a 相當於 c = c // a

邏輯運算符

運算符 描述 示例
and 所謂邏輯與運算符。如果兩個操作數都是真的,那麽則條件成立。 (a and b) 為 true.
or 所謂邏輯OR運算符。如果有兩個操作數都是非零然後再條件變為真。 (a or b) 為 true.
not 所謂邏輯非運算符。用於反轉操作數的邏輯狀態。如果一個條件為真,則邏輯非運算符將返回false。 not(a and b) 為 false.

身份運算符

運算符 描述 示例
is is判斷兩個標識符是否引用自一個對象 x is y,如果id(x)等於id(y) ,返回True
is not is not判斷兩個標識符是否引用不同的對象 x is not y,如果id(x)不等於id(y

python學習筆記(二):python數據類型