Python中的數據類型

Python中的數據類型

一、數字

1、int(整型)

長整數:不過是大一些的整數。。

  跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器內存有限,我們使用的長整數數值不可能無限大。
2、float(浮點型)

  浮點數用來處理實數,即帶有小數的數字。類似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
3、complex(複數)
  複數由實數部分和虛數部分組成,一般形式爲xyj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的xy都是實數。

注:Python中存在小數字池:-5 257

 

二、字節(bytes):


Pthon3對文本和二進制數據做了更爲清晰的區分,文本是Unicode,str表示,二進制數據由bytes類型表示;python3不會以任意隱式方式混用strbytes,不能拼接字符串和字節包,也無法在字節包裏搜索字符串(反之亦然),也不能將字符串傳入參數爲字節包的函數(反之亦然)。

wKioL1jziV-gS0XIAABAAUKjtmo719.jpg-wh_50

                               字節和字符的轉化

#!/usr/bin/env python
# Author:dayi123
msg = "劉毅"
print(msg.encode())
print(b'\xe5\x88\x98\xe6\xaf\x85'.decode())

三、布爾值:

真或假 1 0

四、字符串

1、萬惡的字符串拼接:

  python中的字符串是一個字符數組,每次創建字符串時候需要在內存中開闢一塊連續的空間,並且一旦需要修改字符串的話,就需要再次開闢空間,萬惡的+號每出現一次就會在內從中重新開闢一塊空間。

2、字符串格式化輸出:

name = "dayi123"
print "i am %s " % name  
#輸出: i am alex

PS: 字符串是 %s;整數 %d;浮點數%f

3、字符串的操作:

(1)、字符串常用功能:移除空白、分割、長度、索引、切片

(2)、字符串的操作

1)去掉空白:

username = input("user:")
if username.strip() == "dayi123":           #strip 移除空白
print("welcome")

2)字符串分割

name= "dayi123,dayi,liuyi"
name2 = name.split(",")           #將name轉化爲列表並賦值給name2
print(name2)
print("|".join(name2))            #強name2列表轉化爲字符串,以“|”分割
job = "liuyi"
print('' in job)                   #判斷“job”是不是字符串
print(job.capitalize())            #強”job”中字符串分割打印出來
msg = "hello,{job},it's been a long {age} since time sopken...."
#msg2 = msg.format(job='dayi',age=22)
#print(msg2)                        #打印通過msg格式化後的字符串

msg2 = "hello{0},dddd{1}"
print(msg2.format('dayi',22))        #直接格式化後打印出來

3)字符串切片:

name = "liu yi"
print(name[2:4])                      #打印第二到第三個字符串
print(name.center(40,'-'))              #打印name中40個字符串,不夠則以“—”填充
print(name.find('l'))                   #查找“l”是第幾個字符

4)判斷輸入的是不是數字:

age =input("your age:")               
if age.isdigit():                       #判斷輸入的是不是數字
    age = int(age)
    print("your age:",age)
else:
    print("invalid data type")

5)判斷字符串:

name= 'daf!df34' 
print(name.isalnum())                 #判斷輸入的字符串中有沒有特殊符號
print(name.endswith('df'))             #判斷輸入的字符串是不是以“df”結尾
print(name.startswith('da'))            #判斷輸入的字符串是不是以“da”開頭
print(name.upper().upper())           #” upper()”將所有的字符串轉化成大寫
print(name.upper().lower())            #” lower()”將所有的字符串轉化成小寫

五、列表

1 創建列表:

name_list = ['alex', 'seven', 'eric']     #列表裏面可以存任何東西
或
name_list = list(['alex', 'seven', 'eric'])

2、列表基本操作索引、切片、追加、刪除、長度、切片、循環、包含

3、列表操作:

(1)索引和切片操作:

>>> age = 34

>>> name =["dayi123",34,"liu",35,age] #創建一個列表,可以包括字符串、數字及變量

>>> name[0:2]                          #取列表中第0個元素到第1個元素

['dayi123', 34]

>>> name[-3:-1]                    #取列表中倒數第2個到倒數第3個元素

['liu', 35]

>>> name[-3:]

['liu', 35, 34]

>>> name[:3]                           #取列表中前三個元素

['dayi123', 34, 'liu']           

>>> name[:4][1:3]                      #取列表中前四個元素,再取前四個元素的1到2個元素

[34, 'liu']

>>> name[:4][1:3][1]     

'liu'

>>> name[:4][1:3][1][1]                #切片,取字符

'i'

(2)更改數據操作:

>>> name[2] = "liuyi"                 #更改列表中第二個元素的值,更改爲“liuyi”

>>> name

['dayi123', 34, 'liuyi', 35, 34]  

(3)插入及追加操作:

>>> name.insert(4,'dayi')              #在第4個元素處插入“dayi”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34]

>>> name.append("day")                #在結尾插入一個元素”day”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34, 'day']

(4)刪除操作

>>> name.remove("day")               #刪除列表中的元素”day”

>>> name

['dayi123', 34, 'liuyi', 35, 'dayi', 34]

>>> del name[2:4]                    #刪除第2個元素到第3個元素

>>> name

['dayi123', 34, 'dayi', 34]

>>> del name                          #刪除整個列表

(5)判斷列表中某個元素存在個數:

name =["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0] 
if 3 in name:                         #如果3存在列表name中
    num_of_ele = name.count(3)        #判斷3在列表name中的個數
    print("[%s] 3 is/are in name" %num_of_ele)

(6)查找列表中的元素並更改值:

name= ["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0]
#方法一:只能更改最先查找的元素的值
if 3in name:
    num_of_ele = name.count(3)     #判斷3在列表name中存在的個數
    position_of_ele = name.index(3)  #獲取3的下標,即3是列表中第幾個元素
    name[position_of_ele] = 3333    #更改下標爲position_of_ele的元素值爲3333
    print("[%s] 3 is/are in name" %num_of_ele)
    print(name)
#方法二:更改查找到所有元素的值
for i in range(name.count(3)):        #3存在幾次則循環幾次
   ele_index = name.index(3)      #獲取3的下標
   name[ele_index] = 666         #更改值爲666
print(name)

(7)把小列表追加到大列表:

name = ["dayi123",34,"liu",35,3,34,3,4,5,6,7,8,9,0]
name2 = ["nihaoa",3344,55]
name.extend(name2)                #擴展進來一個新的列表,將name2擴展到name中
name.reverse()                    #反轉列表
name.sort()                       #排序,Python3中如果同時存在字符串會報錯
print(name)

(8)刪除元素:

name.pop()                            #刪除最最後一個元素
name.pop(2)                           #刪除最後一個元素

(9)複製列表:

importcopy                                  #引入copy模塊
name = [34,"dayi123",["liuyi",35,3],34,3,4,5,6,7,8,9,0]  #列表中還可以包含列表
name3 =name.copy()                           #將name列表再複製一份
name4 =copy.copy(name)                      #通過引入copy模塊在複製一份copy模塊
name5 =copy.deepcopy(name)                  #通過” deepcopy”深度複製一份name列表
name[1] = "Dayi123"                          #更改列表中第一個元素的值
name[2][2] =55555                            #更改列表中包含的列表中第二個元素的值
print(name)
print(name3)                                 #列表中的列表時存在另一個內存空間中
print(name4)                                      
print(name5)                                 #通過深度複製可以將列表中的列表複製出來
print(id(name),id(name3),id(name5))          #打印內存地址
print(id(name[2]),id(name3[2]),id(name5[2])) #通過打印內存地址可以看到copy到的列表中包含
                                               的列表內存地址相等,deepcopy到的不相等

六、元組(不可變列表)

1、創建元組:

ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))

2、元組操作

r = (1,2,3,4,5,6)     #只讀列表,元組
#r[1] = 3          #不能修改,修改會報錯
print(r)

七、字典(無序)

1、創建字典:

person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})

2、常用操作:索引、新增、刪除、(鍵、值、鍵值對)、循環、長度

id_db= {                  #創建一個字典
    456789123456789909: {
        'name':"dayi123",
        'age':34,
        'add':"tainshui"
    },
    12345677890987678: {
        'name':"liu",
        'age':3,
        'add':"gasu"
    },
    12345677890987678: {
            'name':"liu",
            'age':3,
            'add':"gasu"
     },
}
#print(id_db)                                 #字典中的值不能重複,所以只打印一次重複值
print(id_db[12345677890987678])               #打印‘12345677890987678’中的值
id_db[12345677890987678]['name'] = "liuyi"    #將’ 12345677890987678’值改爲‘liuyi’
id_db[12345677890987678]['qq_of_wife'] = 110110110  #在‘12345677890987678’中新增值
print(id_db)
del id_db[12345677890987678]['add']           #刪除‘12345677890987678’中的‘add’
print(id_db)
id_db[12345677890987678].pop("age")           #刪除‘12345677890987678’中的‘age’
print(id_db)
v = id_db.get(12345677890987678)               #讀取12345677890987678中的值,賦給“v”
print(v)

dic2 = {
    'name':'haha',
    456789123456789909: {
        'name':"wangwang",
        'age': 24,
        'addr':'china'
    },
}

id_db.update(dic2)       #根據dic2更新id_db的值
print(id_db)      #更新後,沒有的值會增加,都存在的會根據dic2中的更改,dic中獨有的不會變
print(id_db.items())     #將字典轉化爲列表
print(id_db.values())    #打印value值
print(id_db.keys())      #打印key值
print(456789123456789909 in id_db)   #判斷列表中是否存在456789123456789909
print(id_db.setdefault(4567,"haha"))  #如果字典中存在4567則打印出來,不存在,就設置爲haha
#把列表[1,2,34,5,6]中的值取出來當字典中的key,並賦值爲"eee"
print(id_db.fromkeys([1,2,34,5,6],'eee')) 
print(id_db.popitem())   #隨機刪除列表中鍵值
print(id_db)
#循環打印字典中key,value效率低,因爲要有一個dict to list的轉化過程
#for k,v in id_db.items():
#   print(k,v)
for key in id_db:            #效率高
    print(key,id_db[key ])

八、set(集合、無序、不重複序列)

1創建集合

方法一、s1 ={11,12}

        S2 = set()

方法二、set([11,12,13,14])

2操作集合

 1)、創建、添加元素、清空集合

s =set()        #創建空集合
s.add(123)       #給集合中添加一個元素
s.add(123)       #集合中元素不重複
print(s)s.clear()   #清除集合中元素print(s)

2)、更新操作:

s1 ={11,22,33}
s2 = {22,33,44}
#print(s1.difference(s2))         #s1中存在s2中不存在的打印出來
#s3 = s1.symmetric_difference(s2) #s1中不存在的,s2中都不存在的都打印出來
#print(s3)
#s1.difference_update(s2) #查找s1中存在s2中不存在,將結果更新到s1中,s1中僅有僅s1中有的元素
#print(s1)
s1.symmetric_difference_update(s2)#將s1中s2中非共同元素移到s1中(s1中只有s1、s2非共同元素)
print(s1)

3)、集合中的刪除操作:

s1 = {11,22,33}
#s1.remove(11)   #移除一個元素,不存在沒有提示
#print(s1)
#ret = s1.pop()   #移除一個元素,隨機移除,  並獲取移除元素,pop裏面不能加參數
#print(ret)
s1.discard(22)    #如果不存在會有提示
print(s1.discard(333))

4)、交集、並集操作:

s1 = {11,22,33}
s2 = {22,33,44}
s3 = s1.intersection(s2)      #獲取s1和s2的交集
print(s3)
s1.intersection_update(s2)    #將交集更新至s1
print(s1)
s4 = s1.union(s2)             #並集操作
print(s4)
#li = [22,33,44,55,66]
li = "dayi123"
s2.update(li)                 #將可迭代的東西更新至s2,可以是列表,字典,字符串
print(s2)

3 python2中集合的用法

    a & b  #求交集 a.intersection(b)

    a | b  #求並集 a.union(b)

    a – b # 求差集 a.difference(b)

    a ^ b #求對稱差集 a.symmetric_difference(b)

    a.issubset(b)  #a 是b 的子集

    a.issuperset(b) # a 是否包含b

九、字符的編碼與解碼

1、字符的編碼與解碼

(1)在python2默認編碼是ASCII, python3裏默認是unicode

(2)unicode 分爲 utf-32(佔4個字節),utf-16(佔兩個字節),utf-8(佔1-4個字節),utf-16就是現在最常用的unicode版本,不過在文件裏存的還是utf-8,因爲utf8省空間

(3)在py3中encode,在轉碼的同時還會把string 變成bytes類型,decode在解碼的同時還會把bytes變回string

2、python3的字符編碼與解碼

wKiom1jzi7KitHGYAABStCSjdmQ233.jpg-wh_50

#!/usr/bin/envpython
# -*-coding:utf-8 -*-   #python不需要表明字符編碼爲utf-8,默認爲utf-8
#Author:dayi123
 
s =" 劉毅"
t =s.encode("utf-8")   #將字符串解碼成bytes
print(t)
y =t.decode("utf-8")   #將bytes編碼爲字符串
print(y)
x =s.encode('gbk')     #將utf格式字符串解碼爲gbk格式的bytes
print(x)
print(x.decode('gbk')) #將gbk格式的bytes編碼爲utf-8格式的字符串

3、python2的字符編碼與解碼

wKiom1jzi9CQ0mdxAABI8jSBwAw998.jpg-wh_50

#!/usr/bin/envpython
#Author:dayi123
importsys
print(sys.getdefaultencoding())         #顯示默認的字符編碼
msg ="劉毅"
print(msg)
#將字符串解碼爲unicode再編碼爲gbk

 
msg_gb2312= msg.decode("utf-8").encode("gb2312")    
print(msg_gb2312)
 
gb2312_to_gbk= msg_gb2312.decode("gbk").encode("gbk")
print(gb2312_to_gbk)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章