1. 程式人生 > >Python入門學習筆記————09(元組,集合,字典)

Python入門學習筆記————09(元組,集合,字典)

關於元組的函式

  • 以下看程式碼

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'}