python學習之二:python資料結構和記憶體管理
python資料結構和記憶體管理思維導圖:
對於資料結構的學習主要從這幾方面入手:
- 初始化
- 常用操作(增刪該查)
- 常用內建函式,注意點
有序序列主要分為字串,列表,和元組,
一.有序序列
定義:
str1=‘python’//字串
l1=['python','java','c',100] or l1=list(range(100)) //存放的資料型別可以不同
t1=('class','age',10,['en','cn','abc']) //元組中的元素只讀,不能修改,標紅部分可以修改
常用操作(增刪改查-以list和tuple為主):
訪問:索引和切片方式 //l1[index] or l1[start:end:step],遍歷通過for x in l1方式訪問元素。還可以通過下面的方式在訪問元素時獲得序號:
for seq,item in enumerate(l1):
print(seq,item) //seq 從0開始
增加:str不可變物件,物件內容不能改變,若要改變可以轉化成list,再修改,再轉為str。其他兩類增加元素的方式為:
l1.append('element') //增加到最右側
l1.insert(index,'element') //在制定的位置上插入元素element
修改:l1[index]='modifiedValue' //通過下標修改
刪除:l1.pop() //彈出最右側的元素
l1.pop(index) //制定下標彈出元素
l1.remove('element') //刪除指定的元素
del l1[2]//按位置刪除元素
常用內建函式,注意點:
列表推導式:python的一個很有用的功能,格式如下:
[x for x in 列表 if 條件] or
[(x,y) for x in 列表 for y in 列表]
例如,求1~100直接可以被3整除的數有哪些:
result=[x for x in range(1,101) if x%3==0]
print(result)
zip:拼接列表,如:
zip(l1,l2),解包使用zip(*l1)
常用內建函式:
長度:len(l1)
成員判斷:in/not in
獲取元素下標:l1.index('xxx')
統計元素出現的個數:l1.count('xxx')
列表比較:l1>l2,是按元素逐個比較的
排序:sorted(l1)//不改變列表本身順序,返回的是一個物件 l1.sort()//改變列表本身順序
反轉:reversed(l1)//不改變列表本身,返回的是一個物件 l1.reverse()//改變列表本身
拼接:l1.extend(l2) or l1+l2
聚合函式:max,min,sum等等
空值判斷:any和all--不常用
型別轉換:list(),str(),tuple()
若一個列表如下:
l1=['a','b','c']可通過 e1,e2,e3=l1獲得裡面對應的元素。
二.無序容器
set存放的是不重複的元素。
初始化:s1=set(l1)
增加:add(‘’),
刪除:remove(‘’)
集合之間的操作:交集&,並集|,差集-
關於字典的操作:
d1={'name':'zs','age':20}
#成員判斷(針對 key)
'name' in d1
'address' in d1
#新增成員
d1['address']='beijing'
#訪問:按key訪問value:
d1['name']
d1.get('name',-1)
#訪問所有key
d1.keys()
#訪問所有value
d1.values()
#訪問所有元素
d1.items()
#刪除成員
d1.pop('address')#返回指定key的值。並彈出元素
d1.popitem()#r返回整個元素。並彈出
#清空
d1.clear()
三.可變與不可變物件
數值和字串都是不可變物件,列表和字典均是可變物件:
可變和不可變指的是物件的內容可否被改變。圖示如下:
通過上圖,很容易理解可變和不可變的含義,也就理解了為什麼元組中的元素為列表時可以修改的原因。