1、引子:python
一、爲什麼數據要分不一樣的類型:git
數據是用來表示狀態的,不一樣的狀態就應該用不一樣的類型的數據去表示api
二、數據類型:數組
數字app
字符串運維
列表ide
元組測試
字典編碼
集合spa
布爾
2、總體介紹:
1 、int 數字:1,2,3... 用於計算、運算
二、str 字符串: '老男孩'... 主要是少許的數據的存儲
三、bool 布爾:True和False,主要用於判斷真假。
四、list 列表:[true,1,‘alex’,{‘name’:'oldboy'},[1,2,3],(2,3,4),{'wusir'}] 列表,js裏面叫數組
儲存大量的數據,能夠放多種數據類型,因此它也叫容器類數據。例如:布爾、數字、字符串、字典、列表、元祖、集合...
五、tuple:元組,也能夠放多種數據類型,只讀列表,不能進行修改,只限制兒子級別的,元組裏面的字典能夠改。
好比一些重要文件、信息儲存在元組中,只容許別人看,不能被惡意修改。
(true,1,‘alex’,{‘name’:'oldboy'},[1,2,3],(2,3,4),{'wusir'})
六、dict 字典:能夠儲存大量的數據,關聯型數據。並且字典的查詢速度特別快,由於它符合二分查找。
{'name':'oldboy','age':45}
七、set 集合:用戶關係型數據的交集、並集、差集、子集... ,能夠用於列表的去重。集合中元素都是不重複的。
八、
3、基礎數據類型詳細介紹
一、int(bit_length()方法,該方法也不經常使用)
i.bit_length()表示將十進制轉換成二進制,所佔的最少有效位數
"""
二進制 十進制
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
"""
i=3
print(i.bit_length())
i=4
print(i.bit_length())
執行結果:
2
3
二、bool 布爾值
布爾值就兩種:True,False。就是反應條件的正確與否。
真 1 True。
假 0 False。
int轉換成布爾:
int --- > bool 0 爲False 非零 爲True
print(bool(0)) 值爲:False
print(bool(1)) 值爲:True
布爾值轉換成數字:
bool ---> int int(True) 等於1 int(False) 等於 0
print(int(True)) 值爲:1
print(int(False))值爲:0
str轉換成布爾:空字符串是False,非空是true
str ---> bool '' False 非空字符串 True
print(bool('')) 值爲False,有空格的不叫False
三、字符串(字符串是有索引的,索引就是它的下標。索引從後往前最後一個是-1)
s = 'python自動化運維21期'
s1 = s[0] #經過索引找到對應的元素
print(s1)
3.一、字符串的索引和切片(切片、步長)
索引即下標,就是字符串組成的元素從第一個開始,初始索引爲0以此類推。
s = 'python自動化運維21期'
print(s[6:9]) #自動化
print(s[-1]) #-1
print(s[-2]) #-2
切片:(顧頭不顧腚)
s[起始索引:結束索引+1:步長]
print(s[:6]) #python
print(s[:6:2]) #從p開始python間隔一個輸出一個pto
print(s[:]) #輸出整個字符串 python自動化運維21期
print(s[-1:-6:-1]) #期12維運 注意:倒着取值,必須加反向步長
print(s[8:1:-1]) #化動自noht 注意:倒着取值,必須加反向步長
print(s[-1:-5:-2]) #期2
3.二、字符串經常使用方法:
* s.capitalize() 首字母大寫,其餘字母小寫
s='oldBOY'
s1=s.capitalize()
print(s1) #Oldboy
*** s.upper() 所有轉大寫
s2=s.upper()
print(s2) #OLDBOY
*** s.lower() 所有轉小寫
s3=s.lower()
print(s3) #oldboy
*** s.swapcase() 大小寫反轉
s4=s.swapcase()
print(s4) #OLDboy
* s.title() 非字母的元素隔開的每一個單詞首字母大寫
s='alex wusir*oldboy3taibai'
s5=s.title()
print(s5) #Alex Wusir*Oldboy3Taibai
* s.center() 居中,長度本身設定,默認填充物是None,填充物就是括號裏面的
s='oldboy'
s6=s.center(30)
print(s6) # oldboy
s='oldboy'
s6=s.center(30,'*')
print(s6) #************oldboy************
* s.count 字符串中某個元素的個數
s='olodboy'
s7=s.count('o',0,5) #切片,顧頭不顧尾
print(s7) # 2
*** s.startswith() s.endswith() start...end...切片,切片都是顧頭不顧尾
s='olodboy'
s8=s.startswith('o')
print(s8) #True
s='olodboy'
s8=s.startswith('O')
print(s8) #False
s9=s.endswith('y')
print(s9) #True
s10=s.startswith('ol')
print(s10) #True
s11=s.startswith('lo',1,5) #切片都是顧頭不顧尾
print(s11) #True
*** s.strip() #去除首尾的空格、製表符\t、換行符\n
s='\t自動化測試\n' (\t是製表符,表明4個空格。\n是換行符)
print(s) # 自動化測試
s.strip() #不只僅能去除空格,還可使用填充物,舉例
s='oldboey'
s12=s.strip('oye') #只有首尾包含oye元素就去掉,o,y,e是單獨的,沒有順序的,去跟字符串首尾地方去
print(s12) #ldb
name=input('>>>').strip() #之後input要加strip(),爲了項目
s=' oldboey '
s13=s.lstrip() #只去除左邊空格
s14=s.rstrip() #只去除右邊空格
print(s13) #oldboey
print(s14) # oldboey
*** split(str--->list至關於字符串轉換成列表,能夠設置切割次數,隔開後的數比你設置的元素多1)
s = 'oldboywusiroalex'
l = s.split()
print(l) #['oldboywusiroalex']
s1 = 'oldboy,wusir,alex'
l = s1.split(',')
print(l) #['oldboy', 'wusir', 'alex']
s = 'oldboywusiroalex'
l2 = s.split('o')
print(l2) #['', 'ldb', 'ywusir', 'alex']
s = 'oldboywusiroalex'
s15=s.split('o',1) #設置了切割次數
print(s15) #['', 'ldboywusiroalex']
*** join (list---->str)將list轉換成字符串
s='olodboy'
s16='+'.join(s)
print(s16) #o+l+o+d+b+o+y
s=['alex','wusir','taibai']
s17='_'.join(s)
print(s17) #alex_wusir_taibai
*** replace 替換
s='abcd'
s1=s.replace('a','p')
print (s1) #pbcd
*** find & index find經過元素找索引,找不到返回-1;index經過元素找索引,找不到會報錯。(比較下用find比較好)
s='abcd'
s1=s.find('d')
s2=s.index('c')
print(s1) #3
print(s2) #2
s='abcd'
s1=s.find('m')
print(s1) #-1
s='abcd'
s1=s.index('m')
print(s1)
報錯:
Traceback (most recent call last):
File "H:/MyProject/day02.py", line 220, in <module>
s1=s.index('m')
ValueError: substring not found
*** 格式化輸出format(3種用法)
{}至關於%,{}中間不能有空格
第1種:
res='我今年{}歲,個人名字叫{}'.format(18,'alex')
print(res) #我今年18歲,個人名字叫alex
第2種:
res='我今年{0}歲,個人名字叫{1},愛好{2},我依然叫{1}'.format(18,'alex','旅遊')
print(res) #我今年18歲,個人名字叫alex,愛好旅遊,我依然叫alex
第3種:
res='{name} {age} {sex}'.format(sex='male', name='egon', age=18)
print(res) #egon 18 male
res='我養了只小寵物{str},它的名字叫{name},今年{age}歲,天天早上都{do}'.format(name='super',age=18,do='唱歌',str='豬')
print(res) #我養了只小寵物豬,它的名字叫super,今年18歲,天天早上都唱歌
###公共方法:列表、元祖、字符串均可以用的方法。len、count
s = 'fdsafsdagsdafjdskahdhjlsadhfkj'
print(len(s)) #30
s = 'fdsadd'
print(s.count('d')) #3
* is系列:isalnum、isalpha、isdigit
name = 'jinxin123'
print(name.isalnum()) #字符串由字母或數字組成 #True
print(name.isalpha()) #字符串只由字母組成 #False
print(name.isdigit()) #字符串只由數字組成 #False
i = '123a'
if i.isdigit():
i = int(i)
else:
print("輸入有誤...") #輸入有誤...
name = '123'
print(name.isalnum())
print(name.isdigit())
print(name.isalpha())
結果爲:
True
True
False
#!/usr/bin/env python # -*-coding:utf-8-*- #求12356的全部子集 s='12356' def PowerSetsBinary(items): #generate all combination of N items N = len(items) #enumerate the 2**N possible combinations for i in range(2**N): combo = [] for j in range(N): #test jth bit of integer i if(i >> j ) % 2 == 1: combo.append(items[j]) yield combo listson=[] for i in PowerSetsBinary(s): listson.append(i) end_listson=[] # test=[] for j in listson: new_str=','.join(j) # test.append(new_str) if new_str != '': end_listson.append(new_str) print(len(end_listson),end_listson) # print(len(test))
執行結果:
(31, ['1', '2', '1,2', '3', '1,3', '2,3', '1,2,3', '5', '1,5', '2,5', '1,2,5', '3,5', '1,3,5', '2,3,5', '1,2,3,5', '6', '1,6', '2,6', '1,2,6', '3,6', '1,3,6', '2,3,6', '1,2,3,6', '5,6', '1,5,6', '2,5,6', '1,2,5,6', '3,5,6', '1,3,5,6', '2,3,5,6', '1,2,3,5,6'])
四、列表(增(3種 :append、insert、extend)、刪(pop、remove、clear、del)、查、改)
總結:在循環一個列表中,不要對列表進行刪除的動做(改變列表元素的個數的動做),會出錯。
列表也支持索引查找、切片、步長
li = [111,'alex',222,'wusir']
print(li[1]) # alex
print(li[-1]) # wusir
print(li[:2]) # [111, 'alex']
print(li[:3:2])
值爲:
alex
wusir
[111, 'alex']
[111, 222]
##增 append
l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
#增
#append 在最後追加
l.append('葫蘆')
l.append([1,2,3])
print(l) #['老男孩', 'alex', 'wusir', 'taibai', 'ritian', '葫蘆', [1, 2, 3]]
print(l.append('好')) #None 這個是完成追加的動做
## insert插入
l.insert(1,'景nvshen') #按索引位置插入
print(l) #['老男孩', '景nvshen', 'alex', 'wusir', 'taibai', 'ritian']
#迭代着添加 extend
l.extend('alex')
l.extend(['111',222,333])
print(l) #['老男孩', 'alex', 'wusir', 'taibai', 'ritian', 'a', 'l', 'e', 'x', '111', 222, 333]
--------------------------------------------------------------------------------------
#刪除
#pop 有返回值 按照索引刪除,有返回值,刪除誰返回誰,增刪查改種惟一一個有返回值的
print(l.pop(0)) #老男孩
print(l) #['alex', 'wusir', 'taibai', 'ritian']
#remove 按元素刪除
l.remove('alex')
print(l) #['老男孩', 'wusir', 'taibai', 'ritian']
#clear 清空列表
l.clear()
print(l) #[]
#del 內存級別刪除列表
del l
print(l) #報錯
#del按索引刪除
l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
del l[1]
print(l) #['老男孩', 'wusir', 'taibai', 'ritian']
#del切片刪除
l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
del l[:3]
print(l) #['taibai', 'ritian']
# 改
#按照索引改
print(l[2]) #wusir
l[2] = '武藤蘭'
print(l) #['老男孩', 'alex', '武藤蘭', 'taibai', 'ritian']
#按照切片去改 (把切片內刪除,把想添加元素最小單位添加進去)
l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
l[:2] = 'abc'
print(l) #['a', 'b', 'c', 'wusir', 'taibai', 'ritian']
l[1:3] = [111,222,333,444]
print(l) #['a', 111, 222, 333, 444, 'wusir', 'taibai', 'ritian']
# 查(3種)
#按照索引去查詢,按照切片去查詢,for循環查找
l = ['老男孩', 'alex', 'wusir', 'taibai', 'ritian']
for i in l:
print(i)
其餘方法:
l1 = [1,2,1,2,1,1,3,4]
# 其餘方法:
#count 計數
print(l1.count(1)) #4
#len
print(len(l1)) #8
#經過元素找索引
l1 = [1,2,1,2,1,1,3,4]
print(l1.index(2)) #1 只找第一個出現的位置
#排序
l2 = [3,2,4,6,9,8,7,1]
#sort
l2.sort() #從小到大
print(l2) #[1, 2, 3, 4, 6, 7, 8, 9]
l2.sort(reverse=True) #從大到小排序
print(l2) #[9, 8, 7, 6, 4, 3, 2, 1]
#reverse #反過來輸出
l2 = [3,2,4,6,9,8,7,1]
l2.reverse() #[1, 7, 8, 9, 6, 4, 2, 3]
#列表的嵌套
l1 = [1, 2, 'alfdsafex', 'wusir',['oldboy', 'ritian', 10], 'taibai']
#1,將'alex'所有變成大寫,放回原處。
l1[2] = 'ALEX'
print(l1[2].upper()) #ALEX
l1[2] = l1[2].upper()
print(l1) #[1, 2, 'ALEX', 'wusir', ['oldboy', 'ritian', 10], 'taibai']
#2.給['oldboy', 'ritian', 99] 追加一個元素‘女神’。 一個方法
l1[-2].append('女財神')
print(l1) #[1, 2, 'ALEX', 'wusir', ['oldboy', 'ritian', 10, '女財神'], 'taibai']
#3,將'ritian'首字母大寫,放回原處。
l1[-2][1] = l1[-2][1].capitalize()
print(l1) #[1, 2, 'ALEX', 'wusir', ['oldboy', 'Ritian', 10, '女財神'], 'taibai']
#4,將10經過數字相加,或者字符串相加或者等等,變成'100'
l1 = [1, 2, 'alfdsafex', 'wusir',['oldboy', 'ritian', 10], 'taibai']
l1[-2][-1] = str(l1[-2][-1]) + '0'
print(l1) #[1, 2, 'alfdsafex', 'wusir', ['oldboy', 'ritian', '100'], 'taibai']
List=[1,2,2,2,2,3,3,3,4,4,4,4,'abc'] a = {} for i in List: if List.count(i) >= 1: a[i] = List.count(i) print (a) 執行結果: {1: 1, 2: 4, 3: 3, 4: 4, 'abc': 1}
五、字典(在循環字典時,不要對字典進行刪除,不要改變字典的大小)
'''
字典的key是惟一的。key 必須是不可變的數據類型。
key:不可變的數據類型(可哈希):str,bool,tuple,int。
value:任意數據類型。
數據類型分類:
不可變的數據類型(可哈希):str,bool,tuple,int
可變的數據類型:dict,list,set。
容器類數據類型:list,tuple,dict,set.
字典:存儲數據多,關係型數據,查詢速度快(二分查找)。
3.6版本以前,字典是無序的,3.6以後字典是有序的。
'''
#字典的增
dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
#增
# dic['high'] 有則覆蓋,無則添加
dic['high'] = 180
dic['name'] = 'ritian'
print(dic) #{'name': 'ritian', 'age': 21, 'hobby': 'girl', 'high': 180}
# dic.setdefault() 有則不變,無則添加
dic.setdefault('high')
dic.setdefault('high',180)
dic.setdefault('name','日天')
print(dic) #{'name': 'taibai', 'age': 21, 'hobby': 'girl', 'high': None}
# 刪 pop
dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
print(dic.pop('name')) # 返回值 對應的值 #taibai
dic.pop('name') 字典的刪除,經過鍵刪除,刪除整個鍵值對
print(dic.pop('name1','沒有此key sb')) #沒有此key sb
#clear清空字典裏面的內容
print(dic)
dic.clear() # 清空
print(dic) #{}
print(dic.popitem()) #隨機刪除,返回值 #('hobby', 'girl')
print(dic) #{'name': 'taibai', 'age': 21}
del dic #內存級別的刪除
print(dic)
dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
del dic['age'] #根據鍵刪除
print(dic) #{'name': 'taibai', 'hobby': 'girl'}
# 改
dic = {'name': 'taibai', 'age': 21, 'hobby': 'girl', }
dic['name'] = '老男孩'
print(dic) #{'name': '老男孩', 'age': 21, 'hobby': 'girl'}
dic = {"name":"jin","age":18,"sex":"male"}
dic2 = {"name":"alex","weight":75}
dic2.update(dic) # 將dic的鍵值對覆蓋添加到dic2中,dic不變。
print(dic) #{'name': 'jin', 'age': 18, 'sex': 'male'}
print(dic2) #{'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
#查
dic = {"name":"jin","age":18,"sex":"male"}
print(dic['name2']) #報錯
print(dic.get('name')) #jin
print(dic.get('name1')) #None
print(dic.get('name1','沒有此key,sb')) #沒有此key,sb
#keys() values() items()
dic = {"name":"jin","age":18,"sex":"male"}
print(list(dic.keys()))
for i in dic.keys():
print(i)
結果以下:
['name', 'age', 'sex']
name
age
sex
----------------------------------
print(dic.values())
for i in dic.values():
print(i)
執行結果:
dict_values(['jin', 18, 'male'])
jin
18
male
----------------------------------
print(list(dic.items()))
for i in dic.items():
print(i)
執行結果:
[('name', 'jin'), ('age', 18), ('sex', 'male')]
('name', 'jin')
('age', 18)
('sex', 'male')
-----------------------------
#分別賦值
a,b = 1,2
a,b,c = ['alex', 'wusir', 'ritain']
print(a,b,c)
a = 1
b = 5
a,b = b,a
print(a,b)
執行結果:
alex wusir ritain
5 1
for i in dic.items():
print(i)
執行結果:
('name', 'jin')
('age', 18)
('sex', 'male')
for k,v in dic.items():
print(k,v)
執行結果:
name jin
age 18
sex male
dic = {"name":"jin","age":18,"sex":"male"}
print(len(dic)) #3
#fromkeys
dic1 = dict.fromkeys('abc','張三')
dic2= dict.fromkeys([1,2,3],'李四')
print(dic1) #{'a': '張三', 'b': '張三', 'c': '張三'}
print(dic2) #{1: '李四', 2: '李四', 3: '李四'}
dic3 = dict.fromkeys('abc',[])
print(dic3) #{'a': [], 'b': [], 'c': []}
dic3['a'].append('老男孩')
print(dic3) #{'a': ['老男孩'], 'b': ['老男孩'], 'c': ['老男孩']}
#字典的嵌套
dic = {
'name_list':['b哥', '張帝', '人帥', 'kitty'],
'老男孩':{
'name':'老男孩',
'age': 46,
'sex': 'ladyboy',
},
}
#1,['b哥', '張帝', '人帥', 'kitty']追加一個元素,'騎兵'
dic['name_list'].append('騎兵')
print(dic)
#2,將kitty所有變成大寫。
l1 = dic['name_list']
print(l1[-1].upper())
l1[-1] = l1[-1].upper()
print(dic)
dic['name_list'][-1] = dic['name_list'][-1].upper()
print(dic)
#3,將老男孩 改爲oldboy。
dic['老男孩']['name'] = 'oldboy'
print(dic)
#,將ladyboy首字母大寫。
dic['老男孩']['sex'] = dic['老男孩']['sex'].capitalize()
print(dic)
執行結果爲:
{'name_list': ['b哥', '張帝', '人帥', 'kitty', '騎兵'], '老男孩': {'name': '老男孩', 'age': 46, 'sex': 'ladyboy'}}
騎兵
{'name_list': ['b哥', '張帝', '人帥', 'kitty', '騎兵'], '老男孩': {'name': '老男孩', 'age': 46, 'sex': 'ladyboy'}}
{'name_list': ['b哥', '張帝', '人帥', 'kitty', '騎兵'], '老男孩': {'name': '老男孩', 'age': 46, 'sex': 'ladyboy'}}
{'name_list': ['b哥', '張帝', '人帥', 'kitty', '騎兵'], '老男孩': {'name': 'oldboy', 'age': 46, 'sex': 'ladyboy'}}
{'name_list': ['b哥', '張帝', '人帥', 'kitty', '騎兵'], '老男孩': {'name': 'oldboy', 'age': 46, 'sex': 'Ladyboy'}}
>>> dicxx = {'a':'001', 'b':'002'} >>> list(dicxx.keys())[list(dicxx.values()).index("001")] 'a'
六、元祖(只讀,不能進行增、刪、改,只能進行查)
查使用for循環
tu = (11,2,True,[2,3,4],'alex')
for i in tu:
print(i)
print(tu[1]) #經過索引
print(tu[:3:2]) #切片
print(tu.index(True)) #經過元素找索引
print(tu.count(2)) #元素出現的個數
print(len(tu))
tu[-2].append(666)
print(tu)
執行結果:
11
2
True
[2, 3, 4]
alex
2
(11, True)
2
1
5
(11, 2, True, [2, 3, 4, 666], 'alex')
七、集合
'''
集合:
無序,不重複的數據類型。它裏面的元素必須是可哈希的。可是集合自己是不可哈希的。
1:關係測試。交集並集,子集,差集....
2,去重。(列表的去重)
'''
集合的增刪查改(增(2種:add和update))
set1 = {1,'alex',False,(1,2,3)}
l1 = [1,1,2,2,3,3,4,5,6,6]
l2 = list(set(l1))
print(l2) #[1, 2, 3, 4, 5, 6]
set1 = {'alex','wusir','ritian','egon','barry'}
#增
set1.add('666')
print(set1) #{'ritian', 'alex', 'barry', 'wusir', 'egon', '666'}
# update
set1.update('abc')
print(set1)
#刪(remove、pop、clear、del)
set1 = {'alex','wusir','ritian','egon','barry'}
set1.remove('alex') # 刪除一個元素
print(set1)
set1.pop() # 隨機刪除一個元素
print(set1) #{'wusir', 'barry', 'egon', 'ritian'} 該值是變化的
set1.clear() # 清空集合
print(set1) #set()
del set1 # 刪除集合
print(set1)
#----集合:關係測試------
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
#交集 & intersectio
print(set1 & set2) #{4, 5}
print(set1.intersection(set2)) #{4, 5}
#並集 | union
print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8}
print(set1.union(set2)) #{1, 2, 3, 4, 5, 6, 7, 8}
#差集 - difference
print(set1 - set2) #{1, 2, 3}
print(set2 - set1) #{8, 6, 7}
print(set1.difference(set2)) #{1, 2, 3}
#反交集 ^ symmetric_difference
print(set1 ^ set2) #{1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
------------------------------------
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2) #True
print(set1.issubset(set2)) # 這兩個相同,都是說明set1是set2子集。 #True
print(set2 > set1) #True
print(set2.issuperset(set1)) #True
--------------------------------------------
不可變集合,讓集合變成不可變類型
s = frozenset('barry')
s1 = frozenset({4,5,6,7,8})
print(s,type(s))
print(s1,type(s1))
執行結果:
frozenset({'a', 'y', 'r', 'b'}) <class 'frozenset'>
frozenset({4, 5, 6, 7, 8}) <class 'frozenset'>
八、數據類型的補充
range:數字的列表範圍,可定製的數字列表、顧頭不顧尾
l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩']
#1
del l1[1::2]
print(l1) #['alex', 'taibai', '老男孩']
-----------------------------------------------------
#再循環一個列表時,不要對列表進行刪除的動做(改變列表元素的個數動做),會出錯
for i in range(len(l1)):
print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
# # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
# # ['alex', 'taibai', 'barry', '老男孩']
# # ['alex', 'taibai', 'barry', '老男孩']
print(i) # 0 1 2 3
if i % 2 == 1:
del l1[i]
print(l1) # ['alex', 'wusir', 'taibai', 'barry', '老男孩']
# ['alex', 'taibai', 'barry', '老男孩']
# ['alex', 'taibai', 'barry']
print(i) # 0 1
----------------------------------------------------
#range 可定製的數字列表
for i in range(10):
print(i)
結果:
0
1
2
3
4
5
6
7
8
9
for i in range(1,10):也是顧頭不顧尾
print(i)
輸出:
1
2
3
4
5
6
7
8
9
for i in range(1,10,2):
print(i)
輸出:
1
3
5
7
9
for i in range(10,1,-1):
print(i)
輸出:
10
9
8
7
6
5
4
3
2
print(range(10)) #range(0, 10)
l1 = ['alex', 'wusir', 'taibai', 'barry', '老男孩']
for i in range(len(l1)-1,-1,-1):
if i % 2 == 1:
del l1[i]
print(l1) #['alex', 'taibai', '老男孩']
# dict 再循環字典時,不要改變字典的大小。
dic = {'k1':'v1','k2':'v2','k3':'v3','r':666}
l1 = []
for i in dic:
if 'k' in i:
l1.append(i)
print(l1)
結果:['k1', 'k2', 'k3']
for i in l1:
del dic[i]
print(dic) #{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'r': 666}
#tu 若是元組裏面只有一個元素而且沒有逗號隔開,那麼他的數據類型與該元素一致。
tu1 = (1)
print(tu1,type(tu1))
tu2 = ('alex')
print(tu2,type(tu2))
tu3 = (['alex',1,2])
print(tu3,type(tu3))
結果:
1 <class 'int'>
alex <class 'str'>
['alex', 1, 2] <class 'list'>
九、小數據池
python中有小數據池的概念
int、str只有他們有小數據池的概念,其餘的數據類型沒有
# int -5 ~256 的相同的數全都指向一個內存地址,節省空間。
# str:s = 'a' * 20 之內都是同一個內存地址
#只要字符串含有非字母元素,那就不是一個內存地址
#深淺copy
#賦值運算,它們共用一個列表
a = [1,2,3]
b = a
a.append(666)
print(a,b)
結果:[1, 2, 3, 666] [1, 2, 3, 666]
#淺copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)
print(l1,l2) #[1, 2, 3, 666] [1, 2, 3]
print(id(l1),id(l2)) #5241512 5242512
l1 = [1,2,3,[22,33]]
l2 = l1.copy()
l1[-1].append(666)
print(l1,l2) #[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]]
print(id(l1[-1]),id(l2[-1])) #3079824 3079824
#對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始,
# 指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性
#深copy 對於深copy來講,兩個是徹底獨立的,改變任意一個的任何元素(不管多少層),另外一個絕對不改變。
import copy
l1 = [1,2,3,[22,33]]
l2 = copy.deepcopy(l1)
l1[-1].append(666)
print(l1,l2)
print(id(l1[-1]),id(l2[-1]))
結果:
[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33]]
41402776 41403736
十、編碼二
#對於英文
s = 'laonanhai' 對於字符串來講,表現形式是這個(表現形式就是你能看到的),內部編碼是unicode
print(s,type(s))
s1 = b'laonanhai' 對於bytes來講,表現形式是這個,內部編碼方式爲非unicode(非unicode包括utf-8,gbk,gb2312等等等等,只要不是unicode就行)
print(s1,type(s1))
結果:
laonanhai <class 'str'>
b'laonanhai' <class 'bytes'>
----------------------------------------
#對於中文:
s = '中國'
print(s,type(s))
s1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
print(s1,type(s1))
結果:
中國 <class 'str'>
b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
-----------------------------------------------------
#轉化
s = 'laonanhai'
s2 = s.encode('utf-8') #str -->bytes encode 編碼
s3 = s.encode('gbk')
print(s2,s3)
結果:b'laonanhai' b'laonanhai'
--------------------------------
s = 'laonanhai'
s2 = s.encode('utf-8') #str -->bytes encode 編碼
s3 = s.encode('gbk')
print(s2)
print(s3)
ss = s2.decode('utf-8') # bytes ---> str decode 解碼
print(ss)
結果:
b'laonanhai'b'laonanhai'laonanhai