1. 程式人生 > >字典型別,列表型別,列表迴圈推導式

字典型別,列表型別,列表迴圈推導式

字典型別

字典,又稱雜湊對映

可雜湊性
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))))