Python數據結構學習

注:本片文章是我的學習總結,內容來自《簡明Python教程》php

List 有序列表

List是一種保存有序項的數據結構。python

項目列表應該使用方括號擴起來,以便 Python 可以理解您正在定義一個列表。一旦建立了列表,你就能夠在列表中增長,刪除或者搜索列表中的項 。 正由於咱們能夠增長和刪除項,因此咱們稱列表是一種 可變 數據類型,也就是說這個類型能夠被改變。安全

shoplist = ['apple','mango','carrot','banana']

<!--獲取長度-->
len(shoplist)  //4

<!--遍歷list-->
for item in shoplist:
    print(item)

<!--添加元素-->
shoplist.append('rice')

<!--list排序-->
shoplist.sort()

<!--賦值-->
shoplist[0] = 'Google'

<!--刪除元素-->
del shoplist[1]

元組tuple

元組用於將多個對象組合在一塊兒。能夠將它們近似看做列表,可是沒有列表類提供的許多功能。元組的一個重要特徵是,它們和字符串同樣是 不可變的 ,即你不能修改元組。ruby

元組是由一些特殊的項定義的,這些項在一對可選的圓括號中,由逗號隔開。數據結構

元組一般用於這種狀況,也就是語句或者用戶自定義的函數能夠安全地認爲值的集合(即,值的元組)不會改變的狀況。app

<!--元組一旦定義後就不能在進行增刪修改-->

zoo = ('Python','Java','JavaScript','php')
==注意:包含0或1個項的元組==

一個空的元組是由一堆空的圓括號組成的,例如,myempty = ().函數

可是對於一個項的元組且必須僅在第一個項的後面用一個括號來指定該元組,好比oop

myempty = (1,),由於由於若是沒有逗號會形成歧義: a = (1)學習

>>> a = 2
>>> b = (a,11,22)
>>> b
(2, 11, 22)
>>> a = 3
>>> b
(2, 11, 22)

>>> c = [1,1]
>>> d = (c,22,33)
>>> d
([1, 1], 22, 33)
>>> c[1] = 4
>>> d
([1, 4], 22, 33)
元組中能夠包含變量,變量能夠改變,但元組的值不會變,元組中變量的值在裏第一次建立就肯定了,沒法經過變量去改變。

可是若是你的元組中的變量是一個列表list,那麼元組中的值會隨着列表list改變而改變測試

字典

字典是一種鍵值對集合,鍵必須是惟一的,並且鍵只能用不可變對象,好比字符串,但鍵值沒有多大限制。

d = {key1:value1,key2:value2}

字典的經常使用方法有del刪除鍵值對,添加鍵值對直接用索引操做符訪問一個鍵併爲其賦值,遍歷字典則用items方法。

ab = {
    'Swaroop': 'swaroop@swaroopch.com',
    'Larry': 'larry@wall.org',
    'Matsumoto': 'matz@ruby-lang.org',
    'Spammer': 'spammer@hotmail.com'
}
<!--添加鍵值對-->
ad['addKey'] = 'value'

<!--刪除鍵值對-->
del ab['Larry']

<!--遍歷字典-->

for key,value in ad.items():
    print('Contact {} at {}'.format(key,value)

序列

列表list、元組tuple和dict都是序列的一種。

序列的主要特徵是:成員測試(例如:in 與 not in 表達式)和索引操做,這兩種操做讓咱們能夠直接從序列中提取特定的部分。

序列還有一種特殊的操做叫作切片,切片可讓咱們獲得序列的一部分。

shoplist = ['apple','mango','carrot','banana']
name = 'swaroop'

# 字符串索引 #
print('Item 0 is', shoplist[0])
print('Item 1 is', shoplist[1])
print('Item 2 is', shoplist[2])
print('Item 3 is', shoplist[3])
print('Item -1 is', shoplist[-1])
print('Item -2 is', shoplist[-2])
print('Character 0 is', name[0])

# 列表切片 #
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])

# 字符串切片 #
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])

引用

當你建立了一個對象,並把它賦值給一個變量時,這個變量只是 引用 了這個對象,變量並不能表明對象自身!所以,你能夠把變量名看成一個指針,它指向儲存對象的那一塊計算機內存。這稱做綁定名稱到對象。

print('Simple Assignment')
shoplist = ['apple', 'mango', 'carrot', 'banana']
# mylist 只是指向同一個對象的另外一個別名!
mylist = shoplist

# 我買下了第一件商品,因此把它從列表中移除
del shoplist[0]

print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到 shoplist 和 mylist 產生了一樣的輸出
# 輸出的都是沒有 'apple' 的相同列表
# 這驗證了它們都指向着同一個對象

print('Copy by making a full slice')
# 經過全切片來得到一個副本
mylist = shoplist[:]
# 移除第一個元素
del mylist[0]

print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到如今這兩個列表有差別了

輸出:

$ python ds_reference.py
Simple Assignment
shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copy by making a full slice
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']

記住:若是你想要得到列表、或者相似的序列、或更復雜對象的副本,只要不是像整數同樣簡單的 對象,你都須要經過切片操做來得到它的副本。若是你直接把一個變量名賦值給另外一個,它們兩個都會引用同一個對象。在賦值時你須要注意這一點,否則可能會形成意想不到的結果,從而帶來麻煩。

相關文章
相關標籤/搜索