元組的建立
清單:打了激素的數組
元組:帶了緊箍咒的清單
不可變資料類型,沒有增删改查
可以存儲任意資料類型
“”"
定義元組
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]))