前面的學習中,我們已經知道了兩種python的數據類型:int和str。再強調一下對數據類型的理解,這個世界是由數據組成的,數據可能是數字(注意,別搞混了,數字和數據是有區別的),也可能是文字、或者是聲音、視頻等。在python中(其它高級語言也類似)把狀如2,3這樣的數字劃分為一個類型,把狀如“你好”這樣的文字劃分一個類型,前者是int類型,后者是str類型(這里就不說翻譯的名字了,請看官熟悉用英文的名稱,對日后編程大有好處,什么好處呢?誰用誰知道!)。
前面還學習了變量,如果某個變量跟一個int類型的數據用線連著(行話是:賦值),那么這個變量我們就把它叫做int類型的變量;有時候還沒賦值呢,是準備讓這個變量接收int類型的數據,我們也需要將它聲明為int類型的變量。不過,在python里面有一樣好處,變量不用提前聲明,隨用隨命名。
這一講中的list類型,也是python的一種數據類型。翻譯為:列表。下面的黑字,請看官注意了:
**LIST在python中具有非常強大的功能。**
## 定義
在python中,用方括號表示一個list,[ ]
在方括號里面,可以是int,也可以是str類型的數據,甚至也能夠是True/False這種布爾值。看下面的例子,特別注意閱讀注釋。
~~~
>>> a=[] #定義了一個變量a,它是list類型,并且是空的。
>>> type(a)
<type 'list'> #用內置函數type()查看變量a的類型,為list
>>> bool(a) #用內置函數bool()看看list類型的變量a的布爾值,因為是空的,所以為False
False
>>> print a #打印list類型的變量a
[]
~~~
不能總玩空的,來點實的吧。
~~~
>>> a=['2',3,'qiwsir.github.io']
>>> a
['2', 3, 'qiwsir.github.io']
>>> type(a)
<type 'list'>
>>> bool(a)
True
>>> print a
['2', 3, 'qiwsir.github.io']
~~~
用上述方法,定義一個list類型的變量和數據。
本講的標題是“有容乃大的list”,就指明了list的一大特點:可以無限大,就是說list里面所能容納的元素數量無限,當然這是在硬件設備理想的情況下。
## list索引
尚記得在[《玩轉字符串(3)》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/109.md)中,曾經給字符串進行編號,然后根據編號來獲取某個或者某部分字符,這樣的過程,就是“索引”(index)。
~~~
>>> url = "qiwsir.github.io"
>>> url[2]
'w'
>>> url[:4]
'qiws'
>>> url[3:9]
'sir.gi'
~~~
在list中,也有類似的操作。只不過是以元素為單位,不是以字符為單位進行索引了。看例子就明白了。
~~~
>>> a
['2', 3, 'qiwsir.github.io']
>>> a[0] #索引序號也是從0開始
'2'
>>> a[1]
3
>>> [2]
[2]
>>> a[:2] #跟str中的類似,切片的范圍是:包含開始位置,到結束位置之前
['2', 3] #不包含結束位置
>>> a[1:]
[3, 'qiwsir.github.io']
>>> a[-1] #負數編號從右邊開始
'qiwsir.github.io'
>>> a[-2]
3
>>> a[:]
['2', 3, 'qiwsir.github.io']
~~~
## 對list反轉
這個功能作為一個獨立的項目提出來,是因為在編程中常常會用到。通過舉例來說明反轉的方法:
~~~
>>> alst = [1,2,3,4,5,6]
>>> alst[::-1] #反轉
[6, 5, 4, 3, 2, 1]
~~~
這是一種非常簡單的方法,雖然我在寫程序的時候常常使用,但是,我不是十分推薦,因為有時候讓人感覺迷茫。python還有另外一種方法,是比較容易理解和閱讀的,特別推薦之:
~~~
>>> list(reversed(alst))
[6, 5, 4, 3, 2, 1]
~~~
比較簡單,而且很容易看懂。不是嗎?
順便給出reversed函數的詳細說明:
~~~
>>> help(reversed)
Help on class reversed in module __builtin__:
class reversed(object)
| reversed(sequence) -> reverse iterator over values of the sequence
|
| Return a reverse iterator
~~~
它返回一個可以迭代的對象,不過是已經將原來的序列對象反轉了。比如:
~~~
>>> list(reversed("abcd"))
['d', 'c', 'b', 'a']
~~~
很好,很強大,特別推薦使用。
## 對list的操作
任何一個行業都有自己的行話,如同古代的強盜,把撤退稱之為“扯乎”一樣,縱然是一個含義,但是強盜們愿意用他們自己的行業用語,俗稱“黑話”。各行各業都如此。這樣做的目的我理解有兩個,一個是某種保密;另外一個是行外人士顯示本行業的門檻,讓別人感覺這個行業很高深,從業者有一定水平。
不管怎么,在python和很多高級語言中,都給本來數學角度就是函數的東西,又在不同情況下有不同的稱呼,如方法、類等。當然,這種稱呼,其實也是為了區分函數的不同功能。
前面在對str進行操作的時候,有一些內置函數,比如s.strip(),這是去掉左右空格的內置函數,也是str的方法。按照一貫制的對稱法則,對list也會有一些操作方法。
### 追加元素
~~~
>>> a = ["good","python","I"]
>>> a
['good', 'python', 'I']
>>> a.append("like") #向list中添加str類型"like"
>>> a
['good', 'python', 'I', 'like']
>>> a.append(100) #向list中添加int類型100
>>> a
['good', 'python', 'I', 'like', 100]
~~~
[官方文檔](https://docs.python.org/2/tutorial/datastructures.html)這樣描述list.append()方法
> list.append(x)
>
> Add an item to the end of the list; equivalent to a[len(a):] = [x].
從以上描述中,以及本部分的標題“追加元素”,是不是能夠理解list.append(x)的含義呢?即將新的元素x追加到list的尾部。
列位看官,如果您注意看上面官方文檔中的那句話,應該注意到,還有后面半句: equivalent to a[len(a):] = [x],意思是說list.append(x)等效于:a[len(a):]=[x]。這也相當于告訴我們了另外一種追加元素的方法,并且兩種方法等效。
~~~
>>> a
['good', 'python', 'I', 'like', 100]
>>> a[len(a):]=[3] #len(a),即得到list的長度,這個長度是指list中的元素個數。
>>> a
['good', 'python', 'I', 'like', 100, 3]
>>> len(a)
6
>>> a[6:]=['xxoo']
>>> a
['good', 'python', 'I', 'like', 100, 3, 'xxoo']
~~~
順便說一下len(),這個是用來獲取list,str等類型的數據長度的。在字符串講解的時候也提到了。
~~~
>>> name = 'yeashape'
>>> len(name) #str的長度,是字符的個數
8
>>> a=[1,2,'a','b'] #list的長度,是元素的個數
>>> len(a)
4
>>> b=['yeashape']
>>> len(b)
1
~~~
下一講繼續list,有容乃大。
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python