無論什麼緣由,第一章和第二章間隔有點長,堅持
python
第二章 列表和元組web
2.1 序列概念數據庫
本章重點討論最經常使用的兩種類型:列表和元組(列表和元組主要區別是,列表能夠修改,元組則不能。)dom
列表的各個元素經過逗號分隔,寫在方括號中(以下:)函數
>>> list = ['test1','test2']
列表也能夠包含其餘列表,舉例構建一我的員信息的列表也是能夠的,這個列表就是你的數據庫:(以下)url
>>> a = ['lizi',29] >>> b = ['taozi',20] >>> c = [a,b] >>> c [['lizi', 29], ['taozi', 20]]
2.2 通用序列操做
code
全部序列類型均可以進行某些特定操做。這些操做包含:索引(indexing)、分片、加、乘以及檢查某個元素是否屬於序列成員。初次以外,Python還有計算序列長度、找出最大元素和最小元素的內建函數。索引
2.2.1 索引ip
序列中全部元素都是有編號的----從0開始遞增。
utf-8
>>> name = gengjikun >>> name[0] >>> 'g' >>> name[-1] >>> 'n'
注意:字符串就是一個由字符組成的序列。索引0指向第1個元素。
這就是索引。能夠經過索引獲取元素。全部序列都是能夠經過這種方式進行索引。使用負數索引時,Python會從右邊,也就是從最後一個元素開始計數。最後1個元素的位置編號爲-1(不是-0,由於那會和第1個元素重合)
字符串字面值可以直接使用索引,不須要一個變量引用他們。兩種作法的效果是同樣的。
>>> 'Hello'[1] >>> 'e'
還能夠這樣:
>>> fourth = raw_input("Year:")[3] Year:2016 >>> fourth '6'
2.2.2 分片
與使用索引來訪問單個元素相似,可使用分片操做來訪問必定範圍內的元素。分片經過冒號相隔的兩個索引來實現:
>>> tag = '<a href="http://www.python.org">Python web site</a>' >>> tag '<a href="http://www.python.org">Python web site</a>' >>> tag[8:31] '"http://www.python.org"' >>> tag[9:30] 'http://www.python.org' >>> tag[32:-4] 'Python web site'
分片操做的實現須要提供兩個索引做爲邊界,第1個索引的元素是包含在分片內的,而第2個則不包含在分片內。
>>> numbers = [1,2,3,4,5,6,7,8,9,10] >>> numbers[0:1] [1]
假設須要訪問最後3個元素,那麼固然能夠進行顯式的操做:
>>> numbers[7:10] [8, 9, 10]
索引10指向的是第11個元素——這個元素並不存在,倒是在最後一個元素以後。
以下作法是可行的,但若是須要從別表結尾開始計數呢
>>> numbers[-3:-1] [8, 9] >>> numbers[-1:-3] [] >>> numbers[-3:0] []
這並非咱們所要的結果。實際上,只要分片中最左邊的索引比它右邊的晚出如今序列中,若是分片所獲得的部分包括序列結尾的元素,那麼,只需置空最後一個索引便可:
>>> numbers[-3:] [8, 9, 10]
這樣的方法一樣適用於序列開始的元素:
>>> numbers[:3] [1, 2, 3]
實際上,若是須要複製整個序列,能夠將兩個索引置空:
>>> numbers[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
分片實例:
#coding:utf-8 #對http://www.something.com形式的URL進行分割 url = raw_input('Please enter the URL:') domain = url[11:-4] print "Domain name:f" + domain Running script: "E:\pylist\list.py" Please enter the URL:http://www.python.org Domain name:python
2. 更大的步長
分片的時候,分片的開始和結束須要指定。而另一個參數是步長——一般都是隱式設置的。在普通的分片中,步長是1——分片操做就是按照這個步長 逐個遍歷序列的元素,而後返回開始和結束點之間的全部元素。
>>> numbers = [1,2,3,4,5,6,7,8,9,10] >>> numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> numbers[0:10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> numbers[0:10:1] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
步長爲2的分片包括的是從開始到結束每一個1個的元素。
>>> numbers[0:10:2] [1, 3, 5, 7, 9] >>> numbers[::4] [1, 5, 9]
以前說起的捷徑也可使用。若是須要將每4個元素的第1個提取出來,那麼只要將步長設置爲4便可(以上)
固然步長不能爲0——那不會執行——但步長能夠是負數,即從右到左提取元素:
>>> numbers[8:3:-1] [9, 8, 7, 6, 5] >>> numbers[::-1] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] >>> numbers[::-2] [10, 8, 6, 4, 2] >>> numbers[::-4] [10, 6, 2]
2.2.3 序列相加
經過使用加號就能夠進行序列的鏈接操做:
>>> [1,2,3] + [4,5,6] [1, 2, 3, 4, 5, 6] >>> 'Hello,' + 'world!' 'Hello,world!' >>> [1,2,3] + 'world!' Traceback (most recent call last): File "<console>", line 1, in <module> TypeError: can only concatenate list (not "str") to list
以上正如錯誤信息所提示的,列表和字符串是沒法鏈接在一塊兒的,儘管他們都是序列。簡單地說,兩種相同類型的序列才能進行鏈接操做。
2.2.4 乘法
用數字x乘以一個序列會生成新的序列,而在新的序列中,原來的序列將被重置x次。
>>> 'Python' * 5 'PythonPythonPythonPythonPython' >>> [42] * 10 [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
None、空列表和初始化
None是Python的內建值
[]空列表
初始化一個長度爲10的列表:
>>> sequence = [None] * 10 >>> sequence [None, None, None, None, None, None, None, None, None, None]
2.2.5 成員資格
爲了檢查一個值是否在序列中,可使用in運算符。
>>> permissions = 'rw' >>> 'w' in permissions True >>> 'x' in permissions False >>> users = ['mlh','foo','bar'] >>> raw_input('Enter your user name:') in users Enter your user name:mlh True >>> subject = '$$$ Get rich now!!! $$$' >>> '$$$' in subject True
2.2.6 長度、最小值和最大值
內建函數len、min和max很是有用。len函數返回序列中所包含元素的數量,min函數和max函數分別返回序列中最大和最小的元素。
>>> numbers = [100,34,678] >>> numbers [100, 34, 678] >>> len(numbers) 3 >>> max(numbers) 678 >>> min(numbers) 34 >>> max(2,3) 3 >>> min(9,3,2,5) 2
根據以上咱們能夠很容易理解例子中各個操做 是如何實現的,除了最後兩個表達式可能會讓人有些迷惑。在這裏,max函數和min函數的參數不是一個序列,而是以多個數字直接做爲參數。
2.3 列表:Python的'苦力'
列表是可變的——能夠改變列表的內容
2.3.1 list函數
>>> list('Hello') ['H', 'e', 'l', 'l', 'o']
注意:list函數適用於全部類型的序列,而不僅是字符串。
2.3.2 基本的列表操做
改變列表方法:元素賦值、元素刪除、分片賦值以及列表方法(不是全部的列表方法都真正地改變列表)。
一、改變列表:元素賦值
>>> x = [1,1,1,] >>> x[1] = 2 >>> x [1, 2, 1]
二、刪除元素
從列表刪除元素使用del語句
>>> names = [1,2,3,4,5,6] >>> del names[0] >>> names [2, 3, 4, 5, 6]
三、分片賦值
分片是一個很是強大的特性,分片賦值操做則更加顯現它的強大。
>>> name = list('jikun') >>> name ['j', 'i', 'k', 'u', 'n'] >>> name[2:] ['k', 'u', 'n'] >>> name[2:] = list('car') >>> name ['j', 'i', 'c', 'a', 'r']
可使用與原序列不等長的序列將分片替換:
>>> name = list('jikun') >>> name[1:] ['i', 'k', 'u', 'n'] >>> name[1:] = list('ar') >>> name ['j', 'a', 'r'] >>> name[1:] = list('ikunshishen') >>> name ['j', 'i', 'k', 'u', 'n', 's', 'h', 'i', 's', 'h', 'e', 'n']
分片賦值語句能夠在不須要替換任何原有元素狀況下插入新的元素:
>>> numbers = [1,5] >>> numbers[1:2] [5] >>> numbers[1:1] [] >>> numbers[1:1] = [2,3,4] >>> numbers [1, 2, 3, 4, 5]
還能夠經過分片賦值來刪除元素: