1. 程式人生 > >python基礎--元組,集合和字典

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))

在這裡插入圖片描述

字典的建立

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]))

在這裡插入圖片描述