從上節學習過字串後,心中就在思考,想要儲存多個字串怎麼辦?c中有陣列可以實現上述功能,那python呢?現在就讓我們來一**竟吧。python中提供了一種神奇的資料型別list,他有多神奇呢,大家先不要急,讓我婉婉到來,茶要慢慢品嘛。
list是一種有序的集合,可以隨時對他進行增減等操作。比如需要列出小組裡所有組員的名字:
>>>group = [ 'liming' , 'wanghai' , 'zhangfang' ];
>>>print( group );
[ 'liming' , 'wanghai' , 'zhangfang' ]
看到中括號''是不是感覺很像陣列?別急,python中還給我們提供了元組'()'和字典'{}',這些都會在後面一一描述。
那麼,既然list很像陣列,他的索引又是從**開始的呢?上述group中又有幾個元素呢?
>>>len( group );
3>>>group[0];
'liming'
>>>group[0];
'zhangfang'
可以看出,list的索引是0到len( group )-1。下面就是python中名為切片的有意思的地方了,如果你用過matlab的話,你可能會說,「哎呀,這不就是matlab陣列的用法嘛」;如果沒有的話,你可能會說,「還有這麼神奇的用法」。那麼就讓我們一起來看一看吧。
>>>group[-1];
'zhangfang'
>>>group[-3];
'liming'
>>>group[:];
[ 'liming' , 'wanghai' , 'zhangfang' ]
>>>group[::];
[ 'liming' , 'wanghai' , 'zhangfang' ]
>>>group[::-1];
[ 'zhangfang', 'wanghai' , 'liming' ]
list支援倒序查詢元素,如-1找到的就是最後乙個元素,而-len( group )-1就是第乙個元素了。對於省略引數的型別,例如group[::]等效於group[0:len(group)+1:1](第二個冒號省略預設步長為1),而group[::-1]代表的就是group[-1:-len(group)-1:-1];其中第二個':'後面的±1代表了步長。也許細心的你會問為什麼第乙個『:』後面的±len(group)都要±1呢?
這是因為對於python來講[ x : y ]相當於只有y-x個元素,例:
>>>group[0:2];
[ 'liming' , 'wanghai' ]
>>>group[-1:-3:-1];
[ 'zhangfang', 'wanghai' ]
注意:當省略步長時,步長預設為1。
而對於字串型別,同樣支援切片操作,不過是返回的是某些字元而已了,如下所示:
list集合的增刪改查
>>>group.insert( 1 , 'chensen' );
>>>group
[ 'liming' , 'chensen' , 'wanghai' , 'zhangfang' ]
>>>group.pop( 0 );
'liming'
>>>group
[ 'chensen' , 'wanghai' , 'zhangfang' ]
>>>group[0] = 'liming' ;
>>>group
[ 'liming' , 'wanghai' , 'zhangfang' ]
從上面可以看出insert()方法可以在指定索引位置插入元素,pop()方法可以刪除指定索引位置的元素,還可以通過直接賦值的方法對指定索引位置的元素進行更改。怎麼樣,是不是很像matlab呢?
那麼,既然python是乙個動態語言,是否也就意味著list中的元素可以是不同型別的資料呢,讓我們來實驗一下:
>>>group[2] = 20180323;
>>>group
[ 'liming' , 'wanghai' , 20180323 ]
看,完美的賦值。c等語言中有二維陣列,python的list是否也有類似的結構呢?
>>>team = [ 'zhangfang' , 'chensen' ];
>>>group[2] = team ;
>>>group
['liming','wanghai',['zhangfang' ,'chensen']]
>>>len(group)
3>>>group[2][1]
'chensen'
可以看到,group中放置了team,從而構成了"二維陣列",但group的長度仍然是3。
元組tuple()
有一種有序的陣列叫做tuple,他跟list極其相似,但是有需要注意的是元組()一旦被初始化後就不能再改變!!!其他的讀取都跟list相同。有一點需要注意的是,當定義只有乙個元素的元組時會發生以下的情況
>>>test_tuple = (1);
>>>test_tuple
1>>>test_tuple = (1,);
>>>test_tuple
(1,)
對於python來講,()預設為是數學上的括號,而不是tuple中的(),因此需要對其加乙個逗號','同樣的,tuple也會輸出乙個','以免造成誤解。
字典dict{}
dict全稱dictionary,由於使用鍵值(key-value)儲存,因而有著極快的查詢速度。當需要儲存乙個人的名字和年齡時,如果用列表就需要兩個list分別儲存名字和年齡;這樣當需要查詢某乙個人的年齡時就需要先通過乙個list查詢其名字所在的索引,然後根據索引值再去查詢存放在另乙個list中的年齡,當資料量比較大的時候,複雜度可想而知。因此,通過鍵值(key-value)儲存的dict就有著巨大的優越性,下面讓我們一起來看一看dict的儲存。
name_age =
name_age['liming']
print( name_age['liming'] )
for n in name_age:
print(name_age[n])
print(n)
輸出為:
18
18liming
22wanghai
36zhangfang
可以看出對於name_age,傳入的是key而不是索引位置,否則會報錯!!! 題解 神奇的集合
不僅讓ssw02考場自閉,而且改的ssw02也差點自閉,改了ssw02乙個停課的下午 ssw02很少寫動態開點的啊 description 毒瘤的線段樹操作 input 從檔案multiset.in 中讀入資料。第一行兩個正整數n q,表示集合個數和詢問數量。接下來q 行,首先是乙個整數opt 若o...
python中with的神奇用法
在實際的編碼過程中,有時有一些任務,需要事先做一些設定,事後做一些清理,這時就需要python with出場了,with能夠對這樣的需求進行乙個比較優雅的處理,最常用的例子就是對訪問檔案的處理。一般訪問檔案資源時我們會這樣處理 f open r c test.txt r data f.read f....
Python中的集合
python中的集合 一 定義 集合是由一組元素組成。集合中的元素只包含值。需注意兩點 1 集合中的元素是無序的。2 每個元素是唯一的。二 建立集合 語法 set name set 新增 用set name.add 填充集合 語法 set name 三 獲取資訊 因為集合裡面沒有索引值所以判斷某個元...