通過對比學Python(2):集合對象

來源:互聯網
上載者:User
集合對象

任何一門語言的集合對象都是重中之重,一般包括固定數組,可變數組,字典 (hashtable),還有其他一些特殊集合,.net裡System.Collection以 System.Collection.Specialize下的類,Java中Java.util.Collections包中的類就是與此相關.另外, 這兩種環境中的數組都為固定長度數組,但是也同時提供可變長度的列表類ArrayList(兩種環境都叫這個名字).

而php中,數組和字典混合了起來,也就是說,即可以通過順序方式訪問,也可以為數組的每個元素設定一個key

那麼python裡面的集合類是怎麼使用又具有什麼特點呢?

Lists(列表類):

這個類可以類比為.Net和java中的ArrayList,是一個可變長度,沒有類型約束的數組;

  • 建立列表對象

myTags=['a','aa','b','A','啊'],這個語句建立了一個列表對象,並賦予了初始值,注意這裡初始值用中括弧[]括起來,後面還有其他的集合類型,他們的符號稍微不同,千萬小心

  • 添加刪除修改元素

下面的語句往剛剛初始化的數組中添加一個整數類型的對象

myTags.append(0),這個語句吧0這個整數加入到列表中去

與之對應的刪除一個元素的方法為Remove,比如下面語句把內容為b的元素刪除

myTags.remove('b'),注意如果list中有兩個內容為b的元素,remove方法會刪除序號小的那個,而如果列表中麼有內容為"b"的元素,那麼會報錯

myTags[0]="abc",把這個列表的第一項修改為"abc",注意這裡數組還是從0開始,而不像VB和Fortran(沒聽說過?有代溝...)是從1開始的.

  • 列印列表內容

列印這個列表的方法非常簡單

print myTags

輸出結果為:
['a', 'aa', 'b', 'A', u'\u554a',0]

不用進行任何迴圈,呵呵,方便吧,更強大的功能還在後面

  • 對列表進行排序

我們還可以為對list對象進行排序,

myTag.sort()

上面的語句執行結果是

>>> print myTags
[0, 'A', 'a', 'aa', 'b', u'\u554a']

可以看出排序是按照ascii碼錶的對應順序來的,中文被轉化為unicode表示顯示並排在最後,.net和java裡都有這個功能,實現各有不同,參看下面的翻轉列表

  • 反轉列表
    通過myTags.reverse()這個方法,我們就可以把列表翻轉,再次列印,輸出結果為

[u'\u554a', '{', 'b', 'aa', 'a', '\\', 'A', 0]

這個方法.net的ArrayList也有提供,而java中用通過Collection類的reverse靜態方法操作一個集合對象來實現如 ArrayList list=new ArrayList(),Collection.reverse(list),這個類同時也提供了排序,獲得最大/小值,拷貝,迴圈等等方法,但是這個實用的類卻常常被忽略,嗚呼哀哉!

  • 其他方法

    list類還有學多方法,包括用count屬性查看列表長度,pop彈出指定位置的資料,我們就不一一講解了,有興趣的可以通過dir命令查看List對象具有的方法

Tuple(不變列表)

這個類的名稱對.Net和Java的程式員很不直觀,沒有對應的名詞,但是他的概念其實很簡單,即一旦建立就不能改變,雖然Tuple沒有公開的方法來增加元素,但是通過一些內建方法,我們仍然可以做到這點

  • 建立Tuple
    myTuple=('Field','Method','Class') 是不是很類似於.net中數組的聲明和初始化string[] myTags ={ ".Net", "DataBase", "Python" };
    注意這裡用原括弧(),而不是中括弧,也不是.net中申明數組的大括弧{}
  • Tuple在輸出語句中的用法
    print '%s is %d years old' % (name, age),這個語句把姓名和年齡按照順序填到字串的置頂位置,然後輸出,用過c語言的人對%s,%d肯定不陌生,一個置頂內容為字串,一個指定內容為數字.後面那個%d也可以寫成s%,實際上所有的情況你都可以寫成%s,讓python自己來搞定轉換工作,但是寫出正確的類型可以杜絕下面的情況,比如你的程式有錯誤,不小心往年齡裡添了個字串,這是運行到這裡代碼就報錯了.
    .net裡面實現這個功能類似的文法是這樣來做 Console.WriteLine("'{0} is {1} years old",name,age),可以看到.net要靈活一些,後面的name和age不一定要按照順序給出,比如Console.WriteLine ("'{1} is {0} years old",age,name)和上面的語句有同樣的效果
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.