天天看點

python基礎--元組,集合和字典

元組的建立

清單:打了激素的數組

元組:帶了緊箍咒的清單

不可變資料類型,沒有增删改查

可以存儲任意資料類型

“”"

定義元組

t = (1,1.2,True,'westos')
print(t,type(t))
           

如果元組裡面包含可變資料類型,可以間接修改元組内容

t1 = ([1,2,3],4)
t1[0].append(4)
print(t1)

t2 = ()
print(t2)
t3 = tuple([])
print(t3)
l4 = list(())
print(l4)
           

元組如果隻有一個元素,後面一定要加逗号,否則資料類型不确定

t4 = (1,)
print(t4,type(t4))
           

元組的特性

tuple=(1,1.3,True,'curry')
           

索引

print(tuple[0])
print(tuple[-1])
           

切片

print(tuple[1:])
print(tuple[::-1])
print(tuple[:-1])
           

連接配接

除了數值類型之外,不同的資料類型之間不能連接配接

print(tuple+(1,2,3))
           

重複

print(tuple*5)
           

for循環

for i in tuple:
    print(i)
           

成員操作符

print(1 in tuple)
print(1 not in tuple)
           

元組的常用方法

t = (1,2,'a','c','a')
           

檢視元素的索引值

print(t.index('c'))
           

檢視元素在元組中出現的次數

print(t.count('a'))
           

元組的應用場景

元組的指派:有多少元素,就有多少變量接收

t =('westos',10,100)
name,age,score=t
print(name,age,score)
           

scores = (100,89,45,78,45)

先對元組進行轉換

scoresli = list(scores)
scoresli.sort()
print(scoresli)
score_list = sorted(scores)
print(score_list)
           

比賽計分器

scores = (100, 98, 65, 78, 89)
scores = sorted(scores)
#python2中*middle不能使用
min_score, *middle, max_score = scores
#預設依次為最小值,中間值,最大值,middle是一個清單
print(max_score,middle,min_score)
print('最終成績為%s' % (sum(middle) / 4))
           

深拷貝和淺拷貝

不可變資料類型 深拷貝和淺拷貝都不會改變位址

可改變資料類型

淺拷貝隻是拷貝了外殼,内在的位址依然是不變的,隻是一個指向

深拷貝将是以的東西都拷貝的新的位址,位址是變的

In [1]: import copy                                                             

In [2]: a=[1,2]                                                                 

In [3]: b=[3,4]                                                                 

In [4]: c=(a,b)                                                                 

In [5]: d=copy.copy(c)                                                          

In [6]: e=copy.deepcopy(c)                                                      

In [7]: d                                                                       
Out[7]: ([1, 2], [3, 4])

In [8]: e                                                                       
Out[8]: ([1, 2], [3, 4])

In [9]: id(c)                                                                   
Out[9]: 140589617825032

In [10]: id(d)                                                                  
Out[10]: 140589617825032

In [11]: id(e)                                                                  
Out[11]: 140589618049160

In [12]: id(d[0])                                                               
Out[12]: 140589618109512

In [13]: id(e[0])                                                               
Out[13]: 140589618009672

In [14]: id(c[0])                                                               
Out[14]: 140589618109512
In [15]: a=(1,2)                                                                

In [16]: b=(3,4)                                                                

In [17]: c=(a,b)                                                                

In [18]: d=copy.copy(c)                                                         

In [19]: e=copy.deepcopy(c)                                                     

In [20]: id(c)                                                                  
Out[20]: 140589617058632

In [21]: id(d)                                                                  
Out[21]: 140589617058632

In [22]: id(e)                                                                  
Out[22]: 140589617058632

In [23]: id(d[0])                                                               
Out[23]: 140589617029960

In [24]: id(e[0])                                                               
Out[24]: 140589617029960

In [25]: id(c[0])                                                               
Out[25]: 140589617029960
           

集合的定義

集和裡面的元素是不可重複的

s = {1,2,3,4,5,6,6,3,3,2}
print(s,type(s))
s1 = {1}
print(s1,type(s1))
           

如何定義一個空集和

s2 = {}  #預設情況是dict,稱為字典
print(s2,type(s2))
           

定義一個空集和

s3 = set([])
print(s3,type(s3))
           

集和應用1:清單去重

li = [1,2,3,4,1,2,3]
print(list(set(li)))
           

集合的特性

集和支援的特性隻有 成員操作符(索引 切片 重複 連接配接 均不支援)

s = {1,2,3}

print(1 in {1,2,3})
print(1 not in s)
           

for循環

for i in s:
    print(i,end=' ')
print()
print('~~~~~~')
           

for + index

for i,v in enumerate(s):
    print('index: %s,value:%s' %(i,v))
           

集合的常用方法

添加順序,和在集合中存儲的順序不同

s={6,7,3,1,2,3}
           

增加

s.add(9)
print(s)
           

增加多個元素

s.update({10,11,23})
print(s)
           

删除

s.pop()     #會彈出第一個元素
print(s)
           

删除指定元素(元素要存在)

s.remove(23)
print(s)
           

s1 = {1, 2, 3}

s2 = {2, 3, 4}

并集

print('并集:', s1.union(s2))
print('并集:', s1 | s2)
           

交集

print('交集:', s1.intersection(s2))
print('交集:', s1 & s2)
           

差集

可以了解為s1中有哪些s2中沒有的元素

print('差集:', s1.difference(s2))
print('差集:', s1 - s2)
           

對等差分:并集-交集

print('對等差分:', s1.symmetric_difference(s2))
print('對等差分:', s1 ^ s2)
           

s3={1,2}

s4={1,2,3}

s3是否為s4的子集

print(s3.issubset(s4))
           

s3是否為s4的超集

print(s3.issuperset(s4))
           

兩個集合是不是不相交

print(s3.isdisjoint(s4))
           

去重排序練習題

華為機測題:

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性

他先用計算機生成了N個1~1000之間的随機整數(N<=1000),N是使用者輸入的,對于

其中重複的數字,隻保留一個,把其餘相同的數字去掉,不同的數對應着不同的學生的學号,然後再把這些

數從小到大排序,按照排好的順序去找同學做調查,請你協助明明完成“去重”與排序工作

import random

s=set()
num = int(input('請輸入1到1000之間的一個整數:'))
for i in range(num):
    number=random.randint(1,1000)
    s.add(number)
print(sorted(s))
           
python基礎--元組,集合和字典

字典的建立

d={}
print(type(d))
           

字典:key-value鍵值對存儲的一種資料結構

value值可以是任意資料類型:int float long list tuple set

d={
    'curry':[30,'男','投籃'],
    'james':[33,'男','上籃']
}

print(d)
print(d['curry'])
           

字典的嵌套

nbastar={
    '30':{
        'name':'stephen curry',
        'age':30,
        'team':'warriors'
    },
    '23':{
        'name':'lebron james',
        'age':33,
        'team':'lakers'
    }
}
print(nbastar['30']['team'])
           

工廠函數

d5=dict(a=1,b=5)
print(d5)
           

字典的建立

d = {
    '1': 'a',
    '2': 'b',
    '3': 'c'
}
print(d['1'])
           

字典不支援索引和切片

字典的重複和連接配接是無意義的,字典的key是唯一的

成員操作符判斷的是某個值是否為字典的key

print('1' in d)
print('1' not in d)
           

字典的for循環預設周遊字典的key值

for key in d:
    print(key)
           

周遊字典

for key in d:
    print(key, d[key])
           

字典的增加和删除

nbastar = {
    'curry': 30,
    'james': 23,
    'kobe': 24
}
           

增加一個元素,key值存在更新,不存在添加

nbastar['rose'] = 1
print(nbastar)
           

添加多個,key值存在更新,不存在添加,用另一個字典去更新原來的字典

nbastar1 ={
      'klay':11,
     'durant':35
 }
           

update方法的key值不能為數字

nbastar.update(nbastar1)
print(nbastar)
nbastar.update(wesborook=0)
print(nbastar)
           

setdefault添加key值,key值存在不修改,不存在則添加

nbastar.setdefault('curry',32)
print(nbastar)
nbastar.setdefault('paul',3)
 print(nbastar)

nbastar2 = {
    'curry': 30,
    'james': 23,
    'kobe': 24,
    'harden': 13
}
           

del關鍵字

del nbastar2['harden']
print(nbastar2)
           

pop 删除指定的key的key-value值,如果存在,删除,并且傳回删除key對應的value值

如果key不存在直接報錯

player=nbastar2.pop('harden')
print(player)
print(nbastar2)
           

popitem删除最後一個key-value

player  = nbastar2.popitem()
print(player)
print(nbastar2)
           

清空字典的内容

nbastar2.clear()
print(nbastar2)
           

字典的修改和檢視

nbastar = {
    'curry': 30,
    'james': 23,
    'kobe': 24
}
           

檢視字典裡面的key值

print(nbastar.keys())
           

檢視字典裡面的所有value值

print(nbastar.values())
           

周遊字典

for k,v in nbastar.items():
    print(k,'----->',v)
for k in nbastar:
    print(k,'---->',nbastar[k])
           

檢視指定key對應的value值

key值不存在,程式就會報錯

print(nbastar['curry'])
           

get 方法擷取指定key對應的value值

如果key值存在,傳回對應的value值

如果key值不存在,預設傳回None,如果需要指定傳回的值,傳值即可

print(nbastar.get('harden'))
print(nbastar.get('harden','player not in nbastar'))
           

字典的練習

随機生成卡号,卡号為6102009開頭,後面3位一次是(001,002…100)

預設卡号密碼位‘redhat’

輸出格式為

卡号 密碼

6102009001 000000

“”"

card = []

for i in range(100):
    s = '6102009%.3d' %(i+1)
    card.append(s)
card_dict = {}.fromkeys(card,'redhat')
#print(card_dict)
print('卡号\t\t\t\t\t密碼')
for k in card_dict:
    print('%s\t\t\t%s' %(k,card_dict[k]))
           
python基礎--元組,集合和字典