1. 程式人生 > >python學習之二:python資料結構和記憶體管理

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()

三.可變與不可變物件

數值和字串都是不可變物件,列表和字典均是可變物件:

可變和不可變指的是物件的內容可否被改變。圖示如下:


通過上圖,很容易理解可變和不可變的含義,也就理解了為什麼元組中的元素為列表時可以修改的原因。