Python入門學習筆記————09(元組,集合,字典)
阿新 • • 發佈:2018-12-29
關於元組的函式
- 以下看程式碼
In [5]:
#len:獲取元組長度1
t = (1,2,3,4,4)
len(t)
Out[5]:
5
In [6]:
#max,min:最大值,最小值
#如果元祖中有多個最大值最小值
print(max(t))
print(min(t))
4 1
In [8]:
#tuple:轉化或建立元組
l = [1,2,3,4]
t = tuple(l)
print(t)
t = tuple()
print(t)
(1, 2, 3, 4) ()
元組的函式
- 基本與list通用
In [12]:
# count : 計算指定資料出現的次數
t = (2,1,2,2,6,7,8,3,3)
print(t.count(2))
# index:求指定元素在元組中的索引位置
print(t.index(8))
#如果需要查詢的數字是多個,則返回第一個
print(t.index(3))
3 6 7
元組變數交換法
- 兩個變數值交換順序
In [15]:
a = 1
b = 3
print(a)
print(b)
print('*'*20)
#java程式設計師
c = a
a = b
b = c
print(a)
print(b)
print ('*'*20)
#pyton程式設計師
a,b = b,a
print(a)
print(b)
1 3 ******************** 3 1 ******************** 1 3
集合 -set
- 高中數學中的一種概念
- 一堆確定的無序的唯一的資料,集合中每一個數據成為一個元素
In [20]:
# 集合的定義
s = set()
print(type(s))
print(s)
#此時大括號裡必須有值,否則定義的是dict
s = {1,2,3,4,5}
print(s)
<class 'set'> set() {1, 2, 3, 4, 5}
In [19]:
#如果只是用大括號定義,則定義的是一個dict型別
d = {}
print(type(d))
print(d)
<class 'dict'> {}
集合的特徵
- 集合內資料無序,即無法使用索引和分片
- 集合內部資料元素具有唯一性,可以用來排除重複資料
- 集合內的資料,str, int, float,tuple,冰凍集合等,及內部只能放置可雜湊資料
集合序列操作
In [23]:
#成員檢測
#in 或 not in
s = {3,4,5,'hello','good','love'}
print(s)
if 'hello' in s:
print('ni hao')
if 'gou dan' not in s:
print('bye')
{'good', 3, 'hello', 4, 5, 'love'} ni hao bye
集合的便利操作
In [25]:
# for 迴圈
s = {3,4,5,'hello','good','love'}
for i in s:
print(i,end=' ')
good 3 hello 4 5 love
In [27]:
# 帶元組的集合遍歷
s = {(1,2,3),('hello','ko','good'),(22,33,5)}
for k,v,m in s :
print(k,'---',v,'---',m,'---')
for k in s:
print(k)
22 --- 33 --- 5 --- hello --- ko --- good --- 1 --- 2 --- 3 --- (22, 33, 5) ('hello', 'ko', 'good') (1, 2, 3)
集合的內函式
In [29]:
#普通集合函式
s = {11,2,3,55,76,4,2,33,2}
print(s)
#普通集合內函式
ss = {i for i in s}
print(ss)
{33, 2, 3, 4, 11, 76, 55} {33, 2, 3, 4, 11, 76, 55}
In [30]:
#帶條件的集合內函式
sss = {i for i in s if i % 2 == 0}
print(sss)
{2, 4, 76}
In [34]:
#多迴圈的集合內涵
s1 = {1,2,3}
s2 = {'hello','hhh','ds'}
s = {m*n for m in s2 for n in s1}
print(s)
s = {m*n for m in s2 for n in s1 if n ==2}
print(s)
{'hellohello', 'hello', 'hhh', 'hellohellohello', 'hhhhhh', 'dsds', 'dsdsds', 'ds', 'hhhhhhhhh'} {'hhhhhh', 'hellohello', 'dsds'}
集合函式、關於集合的函式
In [37]:
# len max min 跟其他基本函式一致
s = {22,66,234,13,33,6,2}
print(len(s))
print(max(s))
print(min(s))
7 234 2
In [39]:
# set :生成一個集合
l = [2,33,4,6,7,4,22]
s = set (l)
print(s)
{33, 2, 4, 6, 7, 22}
In [40]:
# add : 向集合內新增元素
s = {1}
s.add(33)
print(s)
{1, 33}
In [43]:
# clear
s = {1,2,3,4}
print(id(s))
s.clear()
print(id(s))
140272830374856 140272830374856
In [47]:
# copy :拷貝
# remove:移除指定的值,直接改變原有值,如果要刪除的詞不存在,報錯
# discard:移除集合中的指定值,跟remove一樣但如果刪除的話不報錯
s = {1,23,4,6,78,3}
s.remove (4)
print(s)
s.discard(1)
print(s)
print('@'* 20)
#注意兩者的區別
s.discard(1212)
print(s)
s.remove(121212)
print(s)
# 為什麼remove不存在的值會報keyerror
{1, 3, 6, 78, 23} {3, 6, 78, 23} @@@@@@@@@@@@@@@@@@@@ {3, 6, 78, 23}
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-47-816d0dbdc858> in <module>() 11 s.discard(1212) 12 print(s) ---> 13 s.remove(121212) 14 print(s) KeyError: 121212
In [52]:
#pop 隨機移除一個數
s = {1,2,3,4}
d= s.pop()
print(s)
print(d)
{2, 3, 4} 1
In [55]:
#集合函式
#intersection :交集
#difference:差集
#union:並集
#issubset:檢查一個集合是否是另一個的子集
#issuperset:檢查一個集合是否為另一個超集
s1 = {1,2,33,4,5}
s2 = {4,5,63,3,7,56}
s_1 = s1.intersection(s2)
print(s_1)
s_2 = s1.difference(s2)
print(s_2)
s_3 = s1.issubset(s2)
print(s_3)
{4, 5} {1, 2, 33} False
In [59]:
#集合的數學操作
s1 = {1,2,33,4,5}
s2 = {4,5,63,3,7,56}
s_1 = s1 - s2
print(s_1)
{1, 2, 33}
frozenset:冰凍集合
- 冰凍集合就是不允許任何修改的集合
- 是一個特殊的集合
In [60]:
#建立
s = frozenset()
print(type(s))
print(s)
<class 'frozenset'> frozenset()
dict字典
- 字典是一種組合資料,沒有順序的組合資料,資料以鍵值對形式出現
In [106]:
# 字典的建立
#1
d = {}
print(d)
#2
d = dict()
print(d)
#建立有值的,每一組資料用冒號隔開,每一對鍵值對用逗號隔開
d = {'one':1,'two':2}
print(d)
#用dict直接建立
d =( {'one':1,'two':2})
print(d)
#用dict直接建立
d =dict(one=1,two=2)
print(d)
#
d = dict([('one',1),('two', 2)])
print(d)
{} {} {'one': 1, 'two': 2} {'one': 1, 'two': 2} {'one': 1, 'two': 2} {'one': 1, 'two': 2}
字典的特徵
- 字典是序列型別,但是是無序列表,所以沒有分片和索引
- 字典的資料每個都有鍵值對組成, kv
- key:必須為可雜湊的值,比如int,string,float,tuple,但是,list,set,dict不行
- value:任何值
字典的常用操作
In [108]:
# 訪問資料
d =( {'one':1,'two':2})
#注意訪問格式
#中括號中的是鍵值
print(d['one'])
d['one']='eins'
print(d)
#刪除某個操作
#使用del操作
del d['one']
print(d)
1 {'one': 'eins', 'two': 2} {'two': 2}
In [109]:
# 成員檢測函式 in not in
#檢測的是key的內容
d =( {'one':1,'two':2})
if 2 in d:
print('value')
if 'one' in d:
print('key')
if ('one',1) in d:
print('kv')
key
In [114]:
# 遍歷
d =( {'one':1,'two':2})
# 按key值使用for
for k in d:
print(k,d[k])
#可改寫為
for k in d.keys():
print(k,d[k])
#只訪問字典的值
for v in d.values():
print(v)
#注意以下特殊用法
for k,v in d.items():
print(k,'---',v)
one 1 two 2 one 1 two 2 1 2 one --- 1 two --- 2
字典生成式
In [116]:
d =( {'one':1,'two':2})
#常規字典生成式
dd = {k:v for k,v in d.items()}
print(dd)
#加限制條件的字典生成式
dd = {k:v for k,v in d.items() if v % 2 == 0}
print(dd)
{'one': 1, 'two': 2} {'two': 2}
字典相關函式
In [117]:
# 通用函式:len,max,min,dict
#str(字典):返回字串格式
d =( {'one':1,'two':2})
print( str(d))
{'one': 1, 'two': 2}
In [119]:
#clear:清空
#items:返回字典鍵值對組成的元組格式
d =( {'one':1,'two':2})
i = d.items()
print(type(i))
print(i)
<class 'dict_items'> dict_items([('one', 1), ('two', 2)])
In [120]:
#keys:返回字典的鍵組成的一個結構
k = d.keys()
print(type(k))
print(k)
<class 'dict_keys'> dict_keys(['one', 'two'])
In [122]:
#values:同理,一個可迭代結構
v = d.values()
print(type(v))
print(v)
<class 'dict_values'> dict_values([1, 2])
In [126]:
#get :根據指定鍵返回相應的值,可以設定預設值
d =( {'one':1,'two':2})
print(d.get('oness'))
#get 預設值是None,可以進行設定
print(d.get('one33',33))
#與上進行區別
print(d['oness'])
None 33
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-126-d50959b6f39f> in <module>() 6 print(d.get('one33',33)) 7 #與上進行區別 ----> 8 print(d['oness']) KeyError: 'oness'
In [127]:
# fromkeys:使用指定的序列作為鍵,使用一個值作為字典的所有的鍵的值
l = ['sd','ss','er']
#注意fromkeys的兩個引數的型別
#注意fromkeys的呼叫主體
d = dict.fromkeys(l,'hahahahh')
print(d)
{'sd': 'hahahahh', 'ss': 'hahahahh', 'er': 'hahahahh'}