Python列表與C#語言的相似度介紹
Python列表有不少的知識需要我們學(xué)習(xí),下面我們就來看看相關(guān)的代碼,只有不斷的學(xué)習(xí)才能更好的進行相關(guān)的編寫。Python列表(list)類似于C#中的可變數(shù)組(ArrayList),用于順序存儲結(jié)構(gòu)。
列表用符號[]表示,中間的元素可以是任何類型(包括列表本身,以實現(xiàn)多維數(shù)組),元素之間用逗號分隔。取值或賦值的時候可以像C數(shù)組一樣,按位置索引:
- # -*- coding: utf-8 -*-
- array = [1,2,3]
- print array[0]
- #輸出 1
- array[0] = 'a'
- print array
- #輸出 ['a', 2, 3]
從上邊的代碼中你可能發(fā)現(xiàn)一個有趣的事情:在Python的列表中可以混合使用不同類型的數(shù)據(jù),像['a', 2, 3]這樣,不過我不建議你這樣做,我覺得沒什么好處(雖然個別場合下可能會比較方便)。#t#
另外還可以看到,列表是可變的序列,也就是說我們可以在“原地”改變列表上某個位置所存儲的對象(的值)。
C#中ArrayList支持的多數(shù)操作(如追加、插入、刪除、清空、排序、反轉(zhuǎn)、計數(shù)等),Python中的list也都支持,同時list也支持“切片”這種操作。切片指的是抽取序列的一部分,其形式為:list[start:end:step]。其抽取規(guī)則是:從 start開始,每次加上step,直到end為止。默認的step為1;當(dāng)start 沒有給出時,默認從list 的第一個元素開始;當(dāng)end=-1 時表示list 的最后一個元素,依此類推。一些簡單的例子見下邊代碼:
- # -*- coding: utf-8 -*-
- test = ['never', 1, 2, 'yes', 1, 'no', 'maybe']
- print test[0:3] # 包括test[0],不包括test[3]
- print test[0:6:2] # 包括test[0],不包括test[6],而且步長為2
- print test[:-1] # 包括開始,不包括最后一個
- print test[-3:] # 抽取最后3 個
字符串、列表、元組都支持切片操作,這個很方便,應(yīng)該學(xué)會熟練使用它。
最后,list是Python列表中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),你可以把它當(dāng)作鏈表、堆棧或隊列來使用,效率還不錯。Python中沒有固定長度數(shù)組,如果你確實很在意性能,可以導(dǎo)入array模塊來創(chuàng)建一個C風(fēng)格的數(shù)組,它的效率很高,這里就不詳細介紹了。
Python列表元組(tuple)
元組與列表非常相似,它是用()而不是[]括起來的序列。元組比列表的速度更快,但元組是一個不可變的序列,也就是與str一樣,無法在原位改變它的值。除此之外,其他屬性與列表基本一致。
元組定義的方法與列表類似,不過在定義只包含一個元素的元組時,注意在后邊加一個逗號。請體會以下幾句語句的差異:
- # -*- coding: utf-8 -*-
- test = [0] #列表可以這樣定義
- print type(test) #輸出<type 'list'>
- test = [0,] #也可以這樣定義
- print type(test) #輸出<type 'list'>
- test = (0,) #元組可以這樣定義
- print type(test) #輸出<type 'tuple'>
- test = (0) #但不能這樣定義,Python會認為它是一個括號表達式 print type(test) #輸出<type 'int'>
- test = 0, #也可以省略括號,但要注意與C的逗號表達式不同
- print type(test) #輸出<type 'tuple'>
利用元組的這個特性,可以簡化Python變量的初始化過程,如:
- x,y,z=1,2,3
還可以很簡單地進行數(shù)據(jù)交換。比如:
- a = 1
- b = 2
- a,bb = b,a
以上這類語句在Python列表中被廣泛應(yīng)用于變量交換、函數(shù)傳值等應(yīng)用,因此Python的解釋器在不斷對其進行優(yōu)化,現(xiàn)在已經(jīng)具備了相當(dāng)高的效率。所以以上代碼在Python 2.5以后的版本中,比tmp = a; a = b; b = tmp這種常規(guī)語句更快。