1.清單
Python内置的一種資料類型是清單:list。list是一種有序的集合,可以随時添加和删除其中的元素。
變量<code>classmates</code>就是一個list。用<code>len()</code>函數可以獲得list元素的個數:
對于可變對象,比如list,對list進行操作,list内部的内容是會變化的,比如:
2.
用索引來通路list中每一個位置的元素,記得索引是從<code>0</code>開始的:
3.
可以往list中追加元素到末尾:
也可以把元素插入到指定的位置,比如索引号為<code>1</code>的位置:
4.
要删除list末尾的元素,用<code>pop()</code>方法:
要删除指定位置的元素,用<code>pop(i)</code>方法,其中<code>i</code>是索引位置:
5.
要把某個元素替換成别的元素,可以直接指派給對應的索引位置:
6.
list裡面的元素的資料類型也可以不同
7.元組
另一種有序清單叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:
8.
不可變的tuple有什麼意義?因為tuple不可變,是以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。
9.
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被确定下來
定義的不是tuple,是<code>1</code>這個數!這是因為括号<code>()</code>既可以表示tuple,又可以表示數學公式中的小括号,這就産生了歧義
是以,隻有1個元素的tuple定義時必須加一個逗号<code>,</code>
10.
最後來看一個“可變的”tuple:
因為清單是可變的,是以這個元組是“可變的”
11.
<code>elif</code>是<code>else if</code>的縮寫,完全可以有多個<code>elif</code>,是以<code>if</code>語句的完×××式就是:
12.
輸入<code>1982</code>,結果報錯:
這是因為<code>input()</code>傳回的資料類型是<code>str</code>,<code>str</code>不能直接和整數比較,必須先把<code>str</code>轉換成整數
13.
Python的循環有兩種,一種是for...in循環,依次把list或tuple中的每個元素疊代出來,看例子:
14.
如果要計算1-100的整數之和,從1寫到100有點困難,幸好Python提供一個<code>range()</code>函數,可以生成一個整數序列,再通過<code>list()</code>函數可以轉換為list。比如<code>range(5)</code>生成的序列是從0開始小于5的整數:
15.
第二種循環是while循環,隻要條件滿足,就不斷循環,條件不滿足時退出循環。比如我們要計算100以内所有奇數之和,可以用while循環實作:
16.
在循環中,<code>break</code>語句可以提前退出循環
這兩個語句通常都必須配合<code>if</code>語句使用。
17.字典
Python内置了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。
18.
(1)初始化字典
(2)插入字典元素
把資料放入dict的方法,除了初始化時指定外,還可以通過key放入:
19.
由于一個key隻能對應一個value,是以,多次對一個key放入value,後面的值會把前面的值沖掉
如果key不存在,dict就會報錯
20.
要避免key不存在的錯誤,有兩種辦法,一是通過<code>in</code>判斷key是否存在:
(3)查詢字典元素
二是通過dict提供的get方法,如果key不存在,可以傳回None,或者自己指定的value:
(4)查詢字典元素
注意:傳回<code>None</code>的時候Python的互動式指令行不顯示結果。
21.
(5)删除字典元素
要删除一個key,用<code>pop(key)</code>方法,對應的value也會從dict中删除:
22.
請務必注意,dict内部存放的順序和key放入的順序是沒有關系的。
23.
和list比較,dict有以下幾個特點:
查找和插入的速度極快,不會随着key的增加而變慢;
需要占用大量的記憶體,記憶體浪費多。
而list相反:
查找和插入的時間随着元素的增加而增加;
占用空間小,浪費記憶體很少。
是以,dict是用空間來換取時間的一種方法。
24.
需要牢記的第一條就是dict的key必須是不可變對象。
這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict内部就完全混亂了。這個通過key計算位置的算法稱為雜湊演算法(Hash)。
25.
list是可變的,就不能作為key
26.集合
set和dict類似,也是一組key的集合,但不存儲value。由于key不能重複,是以,在set中,沒有重複的key。
要建立一個set,需要提供一個list作為輸入集合:
(1)初始化集合
注意,傳入的參數<code>[1, 2, 3]</code>是一個list,而顯示的<code>{1, 2, 3}</code>隻是告訴你這個set内部有1,2,3這3個元素,顯示的順序也不表示set是有序的。。
重複元素在set中自動被過濾:
27.
(2)添加集合元素
通過<code>add(key)</code>方法可以添加元素到set中,可以重複添加,但不會有效果:
(3)删除集合元素
通過<code>remove(key)</code>方法可以删除元素:
(4)集合間的交集、并集
set可以看成數學意義上的無序和無重複元素的集合,是以,兩個set可以做數學意義上的交集&、并集| 等操作:
28.
set的原理和dict一樣,是以,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set内部“不會有重複元素”。
29.
而對于不可變對象,比如str,對str進行操作呢: