2018-11-22 python學習第七天
#列表型別
======================================基本使用======================================
1、用途:記錄多個值(同種屬性)
2、定義方式:在[]內用逗號分隔開多個任意型別的值
l=['a','b','c'] #l=list(['a','b','c'])
型別轉換
l=list('hello')
l=list({'x':1,'y':2}) #將字典轉換為列表
print(l)
3、常用操作+內建的方法
#優先掌握的操作:
l=['a','b','c','d','e']
1、按索引存取值(正向存取+反向存取):即可存也可以取
print(l[0]) #讀取列表內第一個元素
print(l[-1]) #讀取列表內最後一個元素
print(id(l))
l[0]='A' #說明列表是可變的,元素改變,但是儲存在記憶體中的ID號不變
print(id(l))
l[4]='EEEEEE' #改變列表中最後一個元素的值
print(l)
l[5]='dddddd' #列表中不能新增新的值
#2、切片(顧頭不顧尾,步長)
l=['a','b','c','d','e']
print(l[1:4]) #列表切片,這裡得到的值是b,c,d
print(l)
#
#3、長度
l=['a','b','c','d','e']
print(len(l)) #檢視列表內有幾個元素這裡是5個
#4、成員運算in和not in
print('a' in l) #檢視a這個字元是不是在列表內
print('ssssss' not in l) #ssss這個元素不在l內, not in 所以也是TrUE
#5、追加&插入
l=['a','b','c','d','e']
l.append(3333333) #append 是新增的意思,在最後的尾部新增
l.append(44444)
print(l) #所以這裡列印的值為a,b,c,d,e,33333333333,444444
#
l.insert(0,11111111111) #inser是插入的意思,這裡0就是首部插入字元為111111111111
print(l) #列印的結果為 [11111111111, 'a', 'b', 'c', 'd', 'e']
#
6、刪除
l=['a','b','c','d','e']
del l[0] #del是刪除的意思,這裡刪除的是a這個元素
res=l.remove('b') #remove是移除的意思,這裡可以使用字元表示不需要根據索引來刪除
print(l)
print(res)
res=l.pop(0) #pop預設是從 首部開始的 如果想尾部刪除就使用-1
print(l)
print(res)
#
#7、迴圈
l=['a','b','c','d','e']
for item in l: #for迴圈列印列表內的元素
print(item)
#需要掌握的操作
l=['a','b','a','c','d','e']
print(l.count('a')) #count是統計列表內a這個元素在列表內有多少個
l=['a','b','a','c','d','e']
items=[1,2,3,4,5]
for item in items:
l.append(item) #for迴圈來依次吧items內的值新增到l內並打印出來
#
l.extend(items) #這裡的話extend一條命令就能完成for迴圈的操作,extend是延申的意思
print(l)
l=['a','b','a','c','d','e']
print(l.index('a',2,5)) #index是檢視a這個元素所在的列表內的位置! 2,5的意思就是從第二索引查到第五索引的位置
l.index(123123123123123123123123)
if 123123123123123123123123 in l:
print(l.index(123123123123123123123123))
l=['a','b','a','c','d','e']
l.reverse() #reverse的意思就是吧列表內的元素全部倒過來
print(l)
#
l=[10,-1,3,11,9]
l.sort(reverse=True) #sort是從小到大排序,但是()內添加了reverse=True時就是反轉,從大到小排序
print(l)
print(l.extend(['a','b','c'])) #直接吧a,b,c新增到l的列表內
print(l.pop(0)) #刪除第一個元素
print(l)
======================================該型別總結====================================
存多個值
有序
可變(1、可變:值變,id不變。可變==不可hash 2、不可變:值變,id就變。不可變==可hash)
練習題
#1. 佇列:先進先出 #佇列就是 吃了就啦 的意思,啦出來肯定是最先吃進去的
l=[] #定義一個空列表
入隊
l.append('first') #新增第一個元素
l.append('second') #新增第二個元素
l.append('third')
print(l)
出隊
print(l.pop(0)) #取出第一個元素 這個時候是first為第一個
print(l.pop(0))
print(l.pop(0))
2. 堆疊:後進先出 #堆疊就是吃了多了嘔吐了,吐出來的肯定是最後吃進去的東西
l=[]
入棧
l.append('first')
l.append('second')
l.append('third')
print(l)
出棧
print(l.pop()) #去除最後一個元素,這個時候是third
print(l.pop())
print(l.pop())
元組tuple:
======================================基本使用======================================
1、用途:元組就是一個不可變的列表
2、定義方式:在()內用逗號分隔開多個任意型別的元素
t=(1,2.2,'aa',('b','c'),['a','b','c']) # t=tuple(...)
print(type(t)) #檢視元祖型別為tuple
強調:
l=['a']
print(type(l),l[0]) #元祖也可以通過識別符號來取值
#
t=('a',)
print(type(t)) #只要元祖內有個逗號,他就是元祖,沒有逗號光一個值他就是字串
print(t)
msg=('hello world') #這個就是字串,一個不是元祖
型別轉換
t1=tuple('hello') #將字串轉換為元祖
t2=tuple([1,2,3]) #將列表轉化為元祖
print(t1)
print(t2)
3、常用操作+內建的方法
#優先掌握的操作:
t=(1,2.2,'aa',('b','c'),['a','b','c'])
1、按索引取值(正向取+反向取):只能取
print(t[0]) #元祖正向取值根據索引去第一個為1
print(t[-1]) #元祖方向取值根據定位符取最後一個值 他是['a', 'b', 'c']
#
t[0]=1111111111
#2、切片(顧頭不顧尾,步長)
t=('a','b','c','e','f')
print(t[1:4]) #元祖切片,切出來的是'b','c','e'
#3、長度
print(len(t)) #顯示元祖內有幾個元素
#4、成員運算in和not in
print('a' in t)
#5、迴圈
for item in t:
print(item)
需要掌握的操作
t=('a','b','c','e','a','f')
print(t.index('a',1,5)) #index是索引的意思,定義a 在這個元祖內的位置! 1,5是在第一位置到第五位置去查詢
print(t.count('a')) #count是統計這個a元素在元祖內有多少個
======================================該型別總結====================================
存多個值
有序
不可變(1、可變:值變,id不變。可變==不可hash 2、不可變:值變,id就變。不可變==可hash)
t=('a','b','c')
print(id(t))
t=('A','B','C')
print(id(t)) #這裡表示的是元祖是不可變的
#字典型別dict
======================================基本使用======================================
1、用途:記錄多個值,列表是索引對應值,而字典是key對應值,其中key對value有描述性的功能
2、定義方式:在{}用逗號分隔開多個元素,每個元素都是key:value的形式,其中key可以不可變型別,通常是字串型別
而value可以是任意型別
d={1:'aaa',2.2:'bbb','xxx':'ccc',(1,2,3):'dddd'} #d=dict(...)
print(d[(1,2,3)]) #字典取值的方式,如果要取多個 print(d[1],d['xxx'])
類轉換
d=dict(x=1,y=2,z=3) #這也是一次生成字典的方式
print(d)
items=[('name','egon'),('age',18),('gender','male')] #這也是字典生成的一種方式
d={}
for item in items:
d[item[0]]=item[1]
d=dict(items) #這dict是字典生成的方式
print(d)
瞭解
keys=['name','age','gender','height','weight']
d={}
for key in keys:
d[key]=None
#
d={}.fromkeys(keys,None) #fromkeys是生成value的關鍵詞
print(d,type(d)) #生成的資訊是{'name': None, 'age': None, 'gender': None, 'height': None, 'weight': None}
#
3、常用操作+內建的方法
#優先掌握的操作:
1、按key存取值:可存可取
dic={'name':'egon','age':18}
print(dic['name'])
dic['name']='EGON'
dic['gender']='male' #字典是可以改變vale 並可以新增新的key 和value進去
print(dic)
l=['a','b','c']
l[0]='A'
l[4]='AAA'
#2、長度len
dic={'name':'egon','age':18}
print(dic)
print(len(dic)) #字典統計長度是統計key有幾個的
#3、成員運算in和not in :是以字典的key為準的
dic={'name':'egon','age':18}
print('name' in dic)
print('egon' in dic)
#4、刪除
dic={'name':'egon','age':18}
del dic['name']
print(dic)
res=dic.pop('name')
print(dic) #字典用pop刪除字典key ,可以打印出來key對應的value的值
print(res)
res=dic.popitem() #popitem是刪除key和value的值 並且可以打印出來,刪除的內容
print(res)
#5、鍵keys(),值values(),鍵值對items()
在python2
>>> dic={'name':'egon','age':18}
>>>
>>>
>>> dic.keys()
['age', 'name']
>>>
>>>
>>> dic.values()
[18, 'egon']
>>>
>>>
>>> dic.items()
[('age', 18), ('name', 'egon')]
在python3
>>> dic={'name':'egon','age':18}
>>>
>>> dic.keys()
dict_keys(['name', 'age'])
>>> dic.values()
dict_values(['egon', 18])
>>> dic.items()
dict_items([('name', 'egon'), ('age', 18)])
#6、迴圈
dic={'name':'egon','age':18}
for k in dic: #預設是列印key
print(k)
for k in dic.keys(): #這個是後面指定列印key值
print(k)
for v in dic.values(): #這個是指定列印value的值
print(v)
for k,v in dic.items(): #k,v=('name', 'egon') #當使用.items時, 前面需要使用2個值來對應,這樣可以同時打印出key,和value的值
print(k,v)
======================================該型別總結====================================
存一個值or存多個值
有序or無序
可變or不可變(1、可變:值變,id不變。可變==不可hash 2、不可變:值變,id就變。不可變==可hash)
pythons=['張鐵蛋','李銅淡','王金蛋','趙銀膽','alex','kevin']
linuxs=['oldboy','張鐵蛋','趙銀膽','alex','wxx']
#
res=[]
for stu in pythons:
if stu in linuxs:
res.append(stu)
#
print(res)
集合型別set
======================================基本使用======================================
1、用途:I: 關係運算 II:去重
2、定義方式:在{}內用逗號分隔開多個元素,但是元素的特點是
I: 集合內的元素必須是不可變型別
II: 集合內元素無序
III: 集合內元素不能重複
s={1,'aaa',2,} #s=set(...)
print(s,type(s))
s=set()
print(s,type(s))
s={1,1,1,1,1,1,1,1,1,1,1,1,'a','a','a'} #集合有去重複的意思,這裡顯示只有{1,'a'}
print(s)
資料型別轉換
res=set('hello') #吧字串變為集合顯示的為{'l', 'h', 'e', 'o'} 因為集合是無序的,去重所以少了個l
print(res)
res=set([1,'a','b']) #吧列表轉換為集合,顯示為{1, 'b', 'a'}
print(res)
3、常用操作+內建的方法
#優先掌握的操作:
#1、長度len
#2、成員運算in和not in
pythons={'張鐵蛋','李銅淡','王金蛋','趙銀膽','alex','kevin'}
linuxs={'oldboy','張鐵蛋','趙銀膽','alex','wxx'}
#3、|合集:求所有報名的學生
print(pythons | linuxs) # | 這個是讓幾個元祖 合集
print(pythons.union(linuxs))
#4、&交集:求同時報名兩門課程的學生
print(pythons & linuxs) # & 這個是顯示交集 顯示的是{'alex', '張鐵蛋', '趙銀膽'} 因為他們都報了2們課程
#5、-差集: 求只報名python課程的學員
print(pythons - linuxs) # - 這個是差集 是讓2個元祖內的元素相減
print(linuxs - pythons) #求只報名linux課程的學員
#6、^對稱差集:求沒有同時報名兩門課程的學生
res=(pythons - linuxs) | (linuxs - pythons)
res=pythons ^ linuxs # ^對稱差集
print(res)
#7、==
s1={1,2,3}
s2={3,2,1}
print(s1 == s2)
注意:父子集描述的是一種包含與被包含的關係
#8、父集:>= #>= 父集就是包含的意思
#9、子集:<=
s1={1,2,3}
s2={1,2,3,4}
print(s2 >= s1)
print(s1 <= s2)
需要掌握的
s1={1,2,3}
s1.update({3,4,5,6}) #update是更新的意思,就是新增元素到集合內{1, 2, 3, 4, 5, 6}
print(s1)
s1={1,'aa','bb',3}
print(s1.pop())
#
res=s1.remove('bbbbbb')
print(s1)
print(res)
s1.discard('bbb')
s1.add(4)
print(s1)
======================================該型別總結====================================
存多個值
無序
可變(1、可變:值變,id不變。可變==不可hash 2、不可變:值變,id就變。不可變==可hash)
集合的去重
侷限性
#1. 只能針對不可變型別
#2. 不能保證原來的順序
names=['egon','egon','egon','alex','alex','kevin']
new_names=list(set(names))
print(new_names)
l=[
{'name':'egon','age':18,'sex':'male'},
{'name':'alex','age':73,'sex':'male'},
{'name':'kevin','age':20,'sex':'female'},
{'name':'egon','age':18,'sex':'male'},
{'name':'egon','age':18,'sex':'male'},
]
new_l=[]
for dic in l:
if dic not in new_l:
new_l.append(dic)
print(new_l)