初學者python筆記(元組、字典)

我們可能知道字符串、數字、列表、元組、字典是python中的五大基本數據類型。前面的文章已經介紹過數字、字符串、列表,這篇則是關於元組和字典方面的一些重點知識。(還會提到元組的修改)

  1. 元組(與列表最大的區別就是能否更改)
    列表(list類):有序,中括號,元素可以被修改
    元組(tuple類):有序,小括號,元素不可被修改且不能刪除增加
#元組定義一般在結尾多加一個逗號,以區分方法中的參數
tu = (111,22,"alex",(11,22),44,) #定義一個元組
#元組可以索引,可以切片
s = "asjfdkjkfhg"
li = ["safj",123,"alex"]
tu = ("alex","age",43,)
v = tuple(s)  #字符串可以轉成元組
v1 = tuple(li)  #列表可以轉成元組
v2 = list(tu)  #元組也可以轉成列表,而且順序不會改變
print(v)
print(v1)
print(v2)

結果是:
(‘a’, ‘s’, ‘j’, ‘f’, ‘d’, ‘k’, ‘j’, ‘k’, ‘f’, ‘h’, ‘g’)
(‘safj’, 123, ‘alex’)
[‘alex’, ‘age’, 43]

  1. 本不可修改元組,但這樣就可以修改
tu = (11,33,"alex",[1314,22],44,True,(13,"一世"),22,)
print(tu)
tu[3][1] = 520  #列表本身可以修改,所以元組裏的列表也可以修改
#tu[6][0] = "一生"----->>>>同理,元組不可修改,元組中的元組也不可修改
print(tu)

結果是:
(11, 33, ‘alex’, [1314, 22], 44, True, (13, ‘一世’), 22)
(11, 33, ‘alex’, [1314, 520], 44, True, (13, ‘一世’), 22)
Ps:元組的第一級元素不可修改,但二、三…級的元素可以修改

tu = (11,33,"alex",[1314,22,['trust me']],44,True,(13,"一世"),33,)
tu[3][1] = 520
tu[3].insert(0,'5發4')  #在指定的0位置插入
n1 = tu.count(33)  #計算某元素出現次數
n2 = tu.index(44)  #返回某元素的索引,即下標
print(tu)
print(n1)
print(n2)

結果是:
(11, 33, ‘alex’, [‘5發4’, 1314, 520, [‘trust me’]], 44, True, (13, ‘一世’), 33)
2
4

  1. 字典(dict類):鍵值對,無序(列表和元組都有序)
    列表、元組、字典三者可以無限嵌套,像這樣:
info = {
	"k1": "v1",
	"k2": "v2",
	"True": "v3",
	"k3": [
		11,
		22,
		33,
		{
			"kk1": "vv1",
			"kk2": "vv2",
			"kk3": (11,22,)		
		}
	],
	"k4" : (11,22,33,44,)
}
#找到11這個數:
v = info["k3"][3]["kk3"][0]
print(v)
#字典的刪除操作:
del info["k1"]  #會將鍵值都刪除

Ps:數字,字符串,元組,布爾值(要注意1和0是否重複)都可以作爲字典的key,而列表和字典不可以作爲key,因爲它們可修改,是動態的

  1. 字典的循環遍歷
for item in info.keys():  #循環key,就是循環鍵值對
	print(info)
for item in info.values():  #循環values,即值
	print(item)

for item in info.keys():    #key與value都循環:
	print(item,info[item])

因爲這裏的結果太長了,顯得冗餘,就不展示了。
關於key與value都循環還有一種簡便的寫法

#py簡化:
for k,v in info.items():  #把鍵值對作爲一個items
	print(k,v)
  1. 特殊方法創建、取值字典
#根據序列來創建字典,指定的值都爲第二個參數
dic = dict.fromkeys(["k1",123,"k3"],123)
print(dic)

#用dic.get()的好處是,若key對應的值不存,不會報錯:
v = dic.get('k11111')
print(v)  #默認返回值是None
v1 = dic.get('k11111',1111)  #若不存在'k11111',則返回1111
print(v1)

結果是:
{‘k1’: 123, 123: 123, ‘k3’: 123}
None
1111

  1. pop()刪除在字典中的巧用
dic = {
	"k1": "v1"
	"k2": "v2"
}
v = dic.popitem()  #隨機刪除一個鍵值對並默認將value賦值給v
print(dic,v)
k,v = dic.popitem()  #隨機刪除一個鍵值對並默認將key賦值給k,將value賦值給v

結果是:
{‘k1’: ‘v1’} (‘k2’, ‘v2’)
k1 v1

  1. 字典鍵值對修改的2種方法
#設置值,已存在就不設置,獲取原來的值;不存在就設置,獲取設置後的值:
dic = {
	"k1": "v1",
	"k2": "v2"
}
v = dic.setdefault("k1111",123)
print(dic,v)
dic.update(k1=123,k3=345,k5=322)  #更新dic字典,若不存在的key,則添進去
print(dic)

結果是:
{‘k1’: ‘v1’, ‘k2’: ‘v2’, ‘k1111’: 123} 123
{‘k1’: 123, ‘k2’: ‘v2’, ‘k1111’: 123, ‘k3’: 345, ‘k5’: 322}
很明顯,字典中加入元素也是無序的

  1. 鍵值對(key與value)的 in 用法
dic = {"k1": "v1" 
}
v = "k1" in dic
vv = "v1" in dic.values()
print(v,vv)

結果爲:True True

  1. 我們都知道布爾值中的1是真,0是假,其實還有很多False,
    布爾值中的假:
    None “” () [] {} 0

  2. 到此爲止,五大數據類型就都總結完了,這裏再簡單分一下類
    按是否可變來分
    可變:列表、字典、集合
    不可變:字符串、數字、元組
    s = frozenset(‘hello’) #定義不可變類型集合
    s = set(‘hello’) #正常集合是可變的

    按訪問順序來分
    直接訪問:數字
    順序訪問:字符串、列表、元組
    映射訪問:字典

  3. 再介紹一種數據類型,集合
    (集合:花括號,不重複,無序,集合中元素必須是不可變類型

s = {"alex",11,33,22,"sb"}
s = set("hello")  #結果是'e','l','h','o'   #無序且不重複
s.add('3')  #添加元素
s.pop()  #因爲無序,所有會隨機刪除一個元素
print(s)

結果是:
{‘l’, ‘o’, ‘3’, ‘e’}
Ps:第二步,將原來的一整串集合設置成了分開放進去的字符串,因爲集合不重複,所以集合變成只有4個元素,每個元素都是一個字符

  1. 集合的交叉、並、補集
s = {"alex",11,33,22,"sb"}
s.remove('sb')  #指定刪除
s.discard('sbbbb')  #不存在時不會報錯,相當於不操作
s1 = {33,22,11,'大黃蜂','雞排飯','豬'}
print(s.union(s1))  #求s與s1的並集
print(s | s1)  #求s與s1的並集
print(s - s1)  #求s與s1的差集,s獨有的
print(s & s1)  #求s與s1的交集,s與s1都有的
print(s ^ s1)  #求s與s1的交叉補集,s獨有與s1獨有組成的集合

結果是:
{33, ‘alex’, 11, ‘豬’, 22, ‘雞排飯’, ‘大黃蜂’}
{33, ‘alex’, 11, ‘豬’, 22, ‘雞排飯’, ‘大黃蜂’}
{‘alex’}
{33, 11, 22}
{‘alex’, ‘雞排飯’, ‘大黃蜂’, ‘豬’}

  1. 字符串拼接之百分號拼接與format()拼接
#百分號拼接類似C語言中的輸出變量
msg = 'I am %s my hobby is %s' %('Ross,','playing game')  
print(msg)

#常用格式化之format後類似一個元組,下標從0開始,多餘的捨棄
tpl = "i am {1}, age {2}".format("seven","Andy",18)  
print(tpl)

#格式化保留小數點:
a = 98.32425545443
tp2 = "我有{:.2f}%的可能性會揍你".format(a)
print(tp2)

結果是:
I am Ross, my hobby is playing game
i am Andy, age 18
我有98.32%的可能性會揍你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章