python中神奇的集合

2021-08-17 10:28:34 字數 3575 閱讀 4206

從上節學習過字串後,心中就在思考,想要儲存多個字串怎麼辦?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 三 獲取資訊 因為集合裡面沒有索引值所以判斷某個元...