2 數據類型詳解

一  數據基本類型概況
01 int 整形
1,2,3 .... 用於計算,運算。
經常使用方法
 i = 4

print(i.bit_length())  ##打印的是二進制的長度

 02 str 字符串
python

如:‘老男孩’,‘alex'.... 少許的數據的存儲。
#切片
 1 s = 'python自動化21期'
 2 # 切片
 3 #s[起始索引:結束索引+1:步長]
 4 # s1 = s[:6]
 5 # print (s1)
 6 #
 7 # s2 = s[6:9]
 8 # print (s2)
 9 
10 # print(s[0:])  ##默認到最後
11 #
12 # print (s[:-1]) ##-1表明最後一個,可是不打印最後一個
13 #
14 # print (s[0:5:2]) ##每隔1個打印一次 2 就表明步長
15 # print (s[5:0:-2])  ##反向加步長,倒着取值
# * capitalize()首字母大寫,其餘字母小寫
 1 # s = 'oldBoy' 
2 #s1 = s.capitalize() 
3 # print (s1) 
# *** 所有大寫upper() 所有小寫lower()

 2 s2 = s.upper() 

3 s3 = s.lower() 

4 print (s2,s3) 
#* 大小寫反轉 swapcase()
 1 s4 = s.swapcase() 
2 print (s4) 

 

 1 #*非字母的元素隔開的每一個單詞首字母大寫 title()
 2 
 3 ss = 'alex wusir*oldboy3taibia'
 4 s5 = ss.title()
 5 print (s5)
 6 
 7 # center 居中,長度本身設定,默認填充物None
 8 s6 = s.center(30,'*')
 9 print (s6)
10 
11 # *** startswith endswith 以什麼開頭,以什麼結尾
12 s7 = s.startswith('o')
13 print (s7)  ##若是是真,則返回true
14 
15 s8 = s.endswith('y')
16 print (s8)  ##同上
 1 # *** strip 去除首尾的空格,製表符\t,換行符。不單單是去除空格....
 2 # rstrip 去除右邊,lstrip 去除左邊
 3 
 4 s = 'tyoyldBoyrte'
 5 #
 6 # print(s)
 7 # s8 = s.strip()
 8 # print(s8)
 9 # s81 = s.strip('t')
10 # # print(s81)
11 # s81 = s.strip('tey')  ##把字符串裏面的tey給去掉了,從左往右依次執行
12 # print(s81)
13 
14 #例子:
15 # name = input('>>>').strip()  ##輸入用戶名的時候自動去除空格,能夠防止用戶輸錯
16 # if name == 'oldboy':
17 #     print('驗證成功')
 1 #*** split  (str ---> list)
 2 
 3 # s1 = 'oldboy,wusir,alex'
 4 # b = 'oldboywusiroalex'
 5 # l = b.split()
 6 # print(l)
 7 # l = s1.split(',')  ##以逗號爲分隔符,讓s1變成了列表
 8 # print(l)
 9 # l2 = b.split('o')  # ['', 'ldb', 'ywusir', 'alex']b
10 # print(l2)
11 #
12 # l3 = b.split('o',1)  # ['', 'ldboywusiroalex']
13 # print(l3)
14 
15 
16 #join 將list --->str
17 sa = 'oldBoy'
18 s9 = '+'.join(sa)  ##用‘+’號把字符串鏈接起來
19 print(s9)
20 l1 = ['oldboy','wusir','alex']
21 s91 = '_'.join(l1) ##用'_'把字符串鏈接起來
22 print(s91)
 1 # #replace 替換
 2 h = '咱們都是好孩子'
 3 h1 = h.replace('','')
 4 print(h1)
 5 
 6 #find 經過元素找索引  找不到返回-1
 7 # index 經過元素找索引 找不到報錯
 8 
 9 u = 'odlabced'
10 u1 = u.find('g')
11 print(u1)
12 
13 # u2 = u.index('g')
14 # print (u2)
15 
16 ##字符串格式化輸出format
17 # res='我叫{}今年{}歲,愛好{}'.format('egon',18,'male')
18 # print(res)
19 res='我叫{0}今年{1}歲,愛好{2},我依然叫{0}'.format('egon',18,'male')
20 print(res)
21 # res='{name} {age} {sex}'.format(sex='male', name='egon', age=18)
22 # print(res)
 1 #公共方法
 2 #len  count
 3 n = 'dfdfdfdfsdfsf'
 4 n1=len(n)
 5 print (n1)  ##返回字符串的長度
 6 n2 = n.count('d')  ##統計字母d出現了幾回
 7 print (n2)
 8 
 9 ##判斷字符串的類型
10 name = 'jinxin989'
11 print (name.isalnum())  ## 判段字符串由字母或數字組成
12 print (name.isdigit())  ##是否只有字母
13 print (name.isalpha()) ##是否只有數字
14 #例子
15 i = '123a'
16 if i.isdigit():
17     i = int(i)
18 else:
19     print("輸入有誤...")
View Code

 

 

03 bool:True,False.git

 


04 list:儲存大量的數據
[True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'}]
一,索引,切片。api

 

 1 l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
 2 # #增
 3 # #append 在組後增長
 4 # l.append('葫蘆')
 5 # print (l)
 6 #
 7 # #insert插入
 8 #
 9 # l.insert(1,'bob')  ##在索引是1的地方插入
10 # print (l)
11 #
12 # #迭代添加
13 #
14 # l.extend('alex')
15 # print (l)

 1 # #刪除
 2 # #pop 有返回值,按照索引刪除
 3 #
 4 # print (l.pop(0))
 5 # print (l)
 6 # #remove
 7 # l.remove('alex')
 8 # print (l)
 9 #
10 # #clear  清空列表
11 # # l.clear()
12 # # print (l)
13 #
14 # #del 內存級別刪除列表
15 #
16 # # del l
17 # # print (l)
18 #
19 # #按索引刪除
20 # # del l[1]
21 # # print(l)
22 #
23 # #切片刪除
24 #
25 # del l[1:3]
26 # print (l)

 1 #
 2 #按照索引去改
 3 # print (l[2])
 4 # l[2]= 'huningfei'
 5 # print (l)
 6 # #按照切片去改
 7 # l[:2] = 'abc'  ##把索引是0和1的所有改爲了abc
 8 # print (l)
 9 # l[1:3] = [111,222,333]
10 # print (l)
1 # #查詢
2 # #按照索引去查詢,按照切片去查下
3 # for i in l:
4 #     print (i)
5 #
 1 # #其餘辦法
 2 #
 3 a = [8,7,8,3,3,5,3,1,2]
 4 # #count 計數
 5 # print (a.count(8))
 6 #
 7 # #len
 8 # print (len(a))
 9 #
10 # #sort 從小到大排序
11 a.sort()
12 print (a)
13 a.sort(reverse=True)  ##從大到小
14 print (a)
15 b = ['a','b','e','e','g']
16 #reverse  ##倒過來排序
17 b.reverse()
18 print (b)
View Code

 獲取列表的下標及索引app

name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3']ide

name.index('Amy')測試

 

05 tuple 元組 只讀列表
(True,1,'alex',{'name':'oldboy'},[1,2,3],(2,3,4),{'wusir'})spa

屬性:3d

 1 tu = (11,2,True,[2,3,4],'alex')
 2 #查找
 3 for i in tu:
 4     print (i)
 5 
 6 #切片
 7 print (tu[1])
 8 print (tu[:3:2])
 9 
10 print(tu.index(True))
11 #count 統計
12 print(tu.count(2))
13 #len長度
14 print(len(tu))
15 #添加
16 tu[-2].append('99')
17 print (tu)
View Code

 


06 dict字典:大量的數據,關聯型數據。查詢速度很是快,符合二分查找。code

'''
字典的key是惟一的。key 必須是不可變的數據類型。
key:不可變的數據類型(可哈希):str,bool,tuple,int。
value:任意數據類型。
數據類型分類:
不可變的數據類型(可哈希):str,bool,tuple,int
可變的數據類型:dict,list,set。
容器類數據類型:list,tuple,dict,set.
字典:存儲數據多,關係型數據,查詢速度快(二分查找)。
3.6版本以前,字典是無序的,3.6以後字典是有序的。orm

{'name':'oldboy','age':45,'name_list':['張三'....]}

 1 dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
 2 #
 3 # #增長
 4 #
 5 # dic ['high'] = 180  ##有則覆蓋,無則添加
 6 # print (dic)
 7 # dic ['name'] = 'ritian'
 8 # print (dic)
 9 #
10 # dic.setdefault('high',170) ##有則不變,無責添加
11 # print (dic)
12 # dic.setdefault('sex','nan')
13 # print (dic)
14 #
1 # #刪除
2 # print (dic.pop('name'))
3 # print (dic.pop('name1','沒有辭職,sb'))
4 #
5 # # dic.clear() #清空
6 # # print (dic)
7 #
8 # print (dic.popitem()) #隨機刪除,返回值
View Code
1 # #改
2 # dic['name'] = 'laonanhai'
3 # print (dic)
4 #
5 # dic2 = {'name':'alex','weight':75}
6 # dic2.update(dic)
7 # print (dic)
8 # print (dic2)
View Code
 1 #
 2 
 3 # print (dic['name'])
 4 # print (dic.get('name'))
 5 # print (dic.get('name1','沒有此鍵值'))
 6 
 7 
 8 # #keys() values() items()
 9 # print (list(dic.keys()))  ##能夠取出鍵值,變成列表
10 # for i in dic.keys():  ##能夠循環打印鍵值
11 #     print (i)
12 #
13 #
14 # print (list(dic.values()))   ##只能取出values
15 # for i in dic.values():
16 #     print (i)
17 #
18 # print (list(dic.items()))  ##能夠同時取出鍵值和values
19 # for i in dic.items():
20 #     print (i)
View Code
 1 ##其餘類型
 2 #分別賦值
 3 a,b = 1,2
 4 print (a,b)
 5 a = 1
 6 b = 5
 7 print (a,b)
 8 
 9 for k,v in dic.items():
10     print (k,v)
11 
12 #len 長度
13 
14 print (len(dic))
15 
16 ##fromkeys  建立一個新字典
17 
18 dic1 = dict.fromkeys('abc', '張三')
19 print (dic1)
20 
21 #打印結果  {'a': '張三', 'b': '張三', 'c': '張三'}
22 dic3 = dict.fromkeys('abc',[10])
23 print (dic3)
24 
25 dic3['a'].append('oldboy')
26 print (dic3)
27 #打印結果      {'a': ['oldboy'], 'b': ['oldboy'], 'c': ['oldboy']}
View Code

 

07 set集合:關係型數據的交集,並集,差集,子集.... 列表的去重。

'''
集合:
無序,不重複的數據類型。它裏面的元素必須是可哈希的。可是集合自己是不可哈希的。
1:關係測試。交集並集,子集,差集....
2,去重。(列表的去重)
'''

set1 = {'alex','wusir','ritian','egon','barry'}

 1 ##去除重複

2 l1 = [1,1,2,2,3,3,4,5,6,6]

3 l2 = list(set(l1))

4 print(l2) 

 1 #
 2 set1 = {'alex','wusir','ritian','egon','barry'}
 3 
 4 set1.add('999')
 5 print (set1)
 6 
 7 set1.update('abc')
 8 print (set1)
 9 
10 #打印結果是'alex', 'ritian', 'b', '999', 'a', 'c', 'egon', 'barry', 'wusir'}
View Code
 1 #
 2 #remove
 3 set1.remove('egon')
 4 print (set1)
 5 
 6 # #pop
 7 # set1.pop()  ##隨機刪除不能指定
 8 # print (set1)
 9 
10 #clear
11 set1.clear()
12 print (set1)
13 
14 # del set1  # 刪除集合
15 # print(set1)
View Code

集合:

 1 set1 = {1,2,3,4,5}
 2 set2 = {4,5,6,7,8}
 3 
 4 #交集 &  intersectio
 5 # print(set1 & set2)
 6 # print(set1.intersection(set2))
 7 
 8 #並集 |   union
 9 # print(set1 | set2)
10 # print(set1.union(set2))
11 
12 #差集  -  difference
13 # print(set1 - set2)
14 # print(set1.difference(set2))
15 
16 #反交集 ^ symmetric_difference  就是打印雙方都沒有的元素
17 # print(set1 ^ set2)
18 # print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}
19 # set1 = {1,2,3}
20 # set2 = {1,2,3,4,5,6}
View Code

其餘

 1 set4 = {1,2,3}
 2 set5 = {1,2,3,4,5,6}
 3 
 4 print (set4 < set5)  ##返會true  說明set1是set2子集。
 5 print(set4.issubset(set5))
 6 
 7 print(set5 > set4)
 8 
 9 #frozenset  返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素。
10 s = frozenset('barry')
11 s1 = frozenset({4,5,6,7,8})
12 print(s,type(s))
13 print(s1,type(s1))
View Code

 二  一些數據類型要注意的地方

#再循環一個列表時,不要對列表進行刪除的動做(改變列表元素的個數動做),會出錯

 1 #再循環一個列表時,不要對列表進行刪除的動做(改變列表元素的個數動做),會出錯
 2 l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩']
 3 #1
 4 # del l1[1::2]
 5 # print(l1)
 6 #
 7 # for i in range(len(l1)):
 8 #     print(l1)  # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
 9 #                 # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
10 #                 # ['alex', 'taibai', 'barry', '老男孩']
11 #                  # ['alex', 'taibai', 'barry', '老男孩']
12 #     print(i) # 0 1  2  3
13 #     if i % 2 == 1:
14 #         del l1[i]
15 #     print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
16 #              # ['alex', 'taibai', 'barry', '老男孩']
17 #             # ['alex', 'taibai', 'barry']
18 #     print(i) # 0 1
View Code

# dict 再循環字典時,不要改變字典的大小。

 1 # dict 再循環字典時,不要改變字典的大小。
 2 # dic = {'k1':'v1','k2':'v2','k3':'v3','r':666}
 3 # l1 = []
 4 # for i in dic:
 5 #     if 'k' in i:
 6 #         l1.append(i)
 7 # # print(l1)
 8 #
 9 # for i in l1:
10 #     del dic[i]
11 # print(dic)
View Code


#tu 若是元組裏面只有一個元素而且沒有逗號隔開,那麼他的數據類型與該元素一致。

1 # tu1 = (1)
2 # print(tu1,type(tu1))
3 # tu2 = ('alex')
4 # print(tu2,type(tu2))
5 #
6 # tu3 = (['alex',1,2])
7 # print(tu3,type(tu3))
View Code
二 深淺copy和小數據池

 1 #淺copy
 2 #對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始,
 3 # 指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性
 4 l1 = [1,2,3]
 5 l2 = l1.copy()
 6 l1.append(666)
 7 print(l1,l2)
 8 print(id(l1),id(l2))
 9 
10 l1 = [1,2,3,[22,33]]  ##這裏由於[22,33]屬於第二層,因此兩個列表都同樣
11 l2 = l1.copy()
12 l1[-1].append(666)
13 print(l1,l2)
14 print(id(l1[-1]),id(l2[-1]))
15 
16 #深copy 對於深copy來講,兩個是徹底獨立的,改變任意一個的任何元素(不管多少層),另外一個絕對不改變。
17 import copy
18 l1 = [1,2,3,[22,33]]
19 l2 = copy.deepcopy(l1)
20 l1[-1].append(666)
21 print(l1,l2)
22 print(id(l1[-1]),id(l2[-1]))
View Code
 1 # id == is
 2 a = 'alex'
 3 b = 'alex'
 4 print(a == b)  # 數值
 5 print(a is b)  # 內存地址
 6 print(id(a))
 7 
 8 #python中 有小數據池的概念。
 9 # int -5 ~256 的相同的數全都指向一個內存地址,節省空間。
10 # str:s = 'a' * 20 之內都是同一個內存地址
11     #只要字符串含有非字母元素,那就不是一個內存地址
View Code

 


三 字典和列表互相嵌套的練習
 1 a = [{"id":1,"name": "電腦", "price": 1999},{'num': 2, 'price': 10, 'name': '鼠標'}]  ##列表套字典
 2 for i in a:
 3     print(i.get("name"),i.get("price"))
 4     print(a[0].get("name"),a[0].get("price"),a[1]["name"],a[1]["price"])#根據索引去獲取鍵值所對應的value
 5 
 6 分別打印爲:
 7 電腦 1999
 8 鼠標 10
 9 
10 電腦 1999 鼠標 10
11 電腦 1999 鼠標 10
12 
13 有三種取值方式


 1 dic = {"k1": {"k2": {"k3": "v3"}}}   ##字典套字典
 2 print(dic["k1"]["k2"]["k3"]) ##取出k3的值
 3 
 4 打印結果爲:v3
 5 
 6 a = ["age",{"name":"huningfei"},["aa",'b','c']]  ##列表套字典和列表
 7 print(a[1].get("name"))  ##獲取name的key
 8 print ((a[2][1])) ##取出最後一個列表裏面的b值
 9 打印結果分別爲
10 
11 huningfei
12 b
13 
14 b = {"a":"1","c":"23","d":["1","2","3"]}  ##字典套列表
15 print (b.get("d"))  ##取出d的key
16 print(b.get("d")[1])  ##單獨取出d的一個值
17 打印結果分別爲:
18 ['1', '2', '3']
19 2

 

四 字符串和列表之間的相互轉換
1 ##列表轉換字符串
2 name = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', '1', '2', '3']
3 b = ','.join(name)
4 print(b,type(b))
5 
6 
7 字符串轉換列表
8 a='hu,ning,fei '
9 print(a.split())

五 列表和字典之間的相互轉換

 1 #列表轉字典
 2 1#兩個列表轉字典
 3 list1 = ['key1','key2','key3']
 4 list2 = ['1','2','3']
 5 print(dict(zip(list1,list2)))
 6 #打印結果 {'key1': '1', 'key2': '2', 'key3': '3'}
 7 
 8 1#嵌套列表轉字典
 9 list3 = [['key1','value1'],['key2','value2'],['key3','value3']]
10 print(dict(list3))
11 #打印結果 {'key1': 'value1', 'key3': 'value3', 'key2': 'value2'}
12 
13 ##字典轉列表
14 new_list=[]
15 dic={'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
16 for i in dic.items():
17     new_list.append(i)
18 print(new_list)
19 print(new_list[0][1]) ##取出列表裏指定的值
20 #打印結果 [('key1', 'value1'), ('key3', 'value3'), ('key2', 'value2')]
相關文章
相關標籤/搜索