字典型別,列表型別,列表迴圈推導式
阿新 • • 發佈:2018-12-10
可雜湊性
print(hash('hello'))
字典是鍵值對,key對應值,其中key和value相對應,具有描述性的功能
#dic={}
#d={1:'aaa',2.2:'bbb','xxx':'ccc',(1,2,3):'dddd'} #d=dict(...)
#print(d[1,2,3]) #[1,2,3]對應的就是dddd
#型別轉換
#d=dict(x=0,y=1)
#print(d)
#item=[('x',2),('y',3)]
#d_1=dict(item)
#print(d_1)
#keys=['name','age','gender','height','weight']
##d_2={}
#d_2={}.fromkeys(keys,None)
#print(d_2)
#內建方法
dic={'name':'egon','age':18}
#print(dic['name'])
#dic['name']='EGON' ##‘EGON’替換為‘egon’
#print(dic)
#dic['gender']='male' #相當於新增,如果有,對應的內容覆蓋,如果沒有新增
#print(dic)
##長度 len
##成員運算 in 和not in 以字典的key為準
##刪除 del pop
dic={'name':'egon','age':18}
• ##刪除對應的key和value,刪除之後不可找回
#print(dic)
#res=dic.pop('name') ###刪除對應的key和value,僅被刪除的key可以找回
##print(res)
#print(dic)
#res=dic.popitem() ###隨機刪除字典的一對key和value,一般刪除末尾的,被刪的可以找回
#print(dic)
#print(res)
###迴圈
dic={'name':'egon','age':18}
#for k in dic:
print(k) ##列印的是key的值
#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') ##列印的是key和value的值
# print(k,v)
擴充套件1
# date={
# '肖申克的救贖' : 'Frank Darabont',
# '這個殺手不太冷' : 'Luc Besson',
# '阿甘正傳' : 'Robert Zemeckis'
# }
# for name in date:
# print('電影'+name+"的導演是"+date[name])
擴充套件2:
#列表轉字典格式
# s = "k:1|k1:2|k2:3|k3:4",
'''
d = {}
def foo(s):
new_list = s.split('|')
for i in new_list:
s1 = i.split(':')
k,v = s1 # 包的概念,
# a,b,c=1,2,3
# print(a,b,c)
d[k] = int(v)
print(d)
foo(s)
'''
擴充套件3:
# words = ['apple','book','atom','bat']
# by_letter = {}
# for word in words:
# letter = word[0]
# if letter not in by_letter:
# by_letter[letter] = [word]
# else:
# by_letter[letter].append(word)
# print(by_letter)
setdefault 函式
# for word in words: #簡潔方法
# letter = word[0]
# by_letter.setdefault(letter,[]).append(word)
# print(by_letter)
#defaultdict 模組
# from collections import defaultdict
# by_letter = defaultdict(list)
# for word in words:
# by_letter[word[0]].append(word)
# print(by_letter)
#列表型別 []
1,基礎
#型別轉換
#l=['a','b','c'] #l=list(['a','b','c'])
#l=list('hello')
#print(l)
#l=list({'x':1,'y':2})
#print(l)
#需要掌握的內建方法
#l=['a','b','c','d','e']
#print(l[1])
#print(l[-1])
#l[0]='A' #第一個字母變成A,但是id完全相同
#print(l)
#l[5]='eeeeeee' #轉換的內容超過列表裡的內容,報錯l
#切片
#l=['a','b','c','d','e']
#print(l[1:3:2]) # 1:3選中切割從第2個包括第2個到第3個但不包過第3個的內容,:2是步長,預設步長為1
#長度 len
#l=['a','b','c','d','e']
#print(len(l)) # 輸出為5
#追加 append
#l=['a','b','c','d','e']
#l.append('DDDDD') #預設追加最後
#print(l)
#插入 insert
#l=['a','b','c','d','e']
#l.insert(0,'LLLLLL') #從第一項之前開始插入’LLLLLL'
#print(l)
#刪除 del remove pop
#l=['a','b','c','d','e']
#del l[1] #刪除l的第二項,不輸入內容預設刪除全部,內容刪除全部後查詢為錯誤
#print(l)
#res=l.remove('b') # 移動確定的內容‘b',而不是按次序刪除。內容被移除顯示為None
#print(1)
#print(res)
#res=l.pop(1) #移動按次序查詢的內容,內容被移除之後可以繼續顯示為本身
#print(res)
#print(l)
#迴圈
for.. in ...:
#l=['a','b','c','d','e']
#for item in l: # for in 迴圈
print(item)
列表生成式
# names=['egon','alex_sb','kevin_sb']
# print([name for name in names if name.endswith('sb')])
# print([name.upper() for name in names if name.endswith('sb')])
擴充套件1:
#列表巢狀推導式
# all_data= [['egon','alex','kevin'],['huxx','jix','wang']]
# a = [name for names in all_data for name in names if len(name) > 3] #最底層的巢狀寫在最後面
# print(a)
# tuples = [(1,2,3),(4,5,6),(7,8,9)]
# a = [x for names in tuples for x in names]
# print(a)
# print([[x for x in names] for names in tuples]) #分析語法也是很重要的
#如果有三個及以上的巢狀,就要考慮可讀性的問題了
擴充套件2: bisect
# import bisect
# a = [1,0,3,4,5,6,6,6,7,7]
# res = bisect.bisect(a,0) #查詢0插入的位置而不會插入,
# res_1 = bisect.bisect(a,1)
# print(a)
# print(res)
# print(res_1)
擴充套件3:
zip函式
# a=[1,2,3]
# b=[4,5,6]
# c=zip(a,b)
# print(list(c)) #對應生成組合
# d=[7,8]
# print(list(zip(a,b,d))) #取決於最短的那一組
zip函式和enumerate函式j結合
# a=[1,2,3]
# b=[4,5,6]
# for i ,(k,v) in enumerate(zip(a,b)):
# print(i,(k,v))
# for i, k in enumerate(zip(a, b)): #效果一樣,不會報錯
# print(i,k)
# for i ,k in enumerate(zip(a,b)): #加個冒號
# print('{0}:{1}'.format(i,k))
# a=[(1,2),(3,4),(5,6)]
# b,c = zip(*a) #相當於線性代數的列概念
# print(b,c)
#reversed函式 #生成器,反排序
print(list(reversed(range(10))))