## 對list的操作
### list的長度
還記得str的長度怎么獲得嗎?其長度是什么含呢?那種方法能不能用在list上面呢?效果如何?
做實驗:
~~~
>>> name = 'qiwsir'
>>> type(name)
<type 'str'>
>>> len(name)
6
>>> lname = ['sir','qi']
>>> type(lname)
<type 'list'>
>>> len(lname)
2
>>> length = len(lname)
>>> length
2
>>> type(length)
<type 'int'>
~~~
實驗結論:
* len(x),對于list一樣適用
* 得到的是list中元素個數
* 返回值是int類型
### 合并list
[《有容乃大的list(1)》](_-113)中,對list的操作提到了list.append(x),也就是將某個元素x 追加到已知的一個list后邊。
除了將元素追加到list中,還能夠將兩個list合并,或者說將一個list追加到另外一個list中。按照前文的慣例,還是首先看[官方文檔](https://docs.python.org/2/tutorial/datastructures.html)中的描述:
> list.extend(L)
>
> Extend the list by appending all the items in the given list; equivalent to a[len(a):] = L.
**向所有正在學習本內容的朋友提供一個成為優秀程序員的必備:看官方文檔,是必須的。**
官方文檔的這句話翻譯過來:
> 通過將所有元素追加到已知list來擴充它,相當于a[len(a)]= L
英語太爛,翻譯太差。直接看例子,更明白
~~~
>>> la
[1, 2, 3]
>>> lb
['qiwsir', 'python']
>>> la.extend(lb)
>>> la
[1, 2, 3, 'qiwsir', 'python']
>>> lb
['qiwsir', 'python']
~~~
上面的例子,顯示了如何將兩個list,一個是la,另外一個lb,將lb追加到la的后面,也就是把lb中的所有元素加入到la中,即讓la擴容。
學程序一定要有好奇心,我在交互環境中,經常實驗一下自己的想法,有時候是比較愚蠢的想法。
~~~
>>> la = [1,2,3]
>>> b = "abc"
>>> la.extend(b)
>>> la
[1, 2, 3, 'a', 'b', 'c']
>>> c = 5
>>> la.extend(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
~~~
從上面的實驗中,看官能夠有什么心得?原來,如果extend(str)的時候,str被以字符為單位拆開,然后追加到la里面。
如果extend的對象是數值型,則報錯。
所以,extend的對象是一個list,如果是str,則python會先把它按照字符為單位轉化為list再追加到已知list。
不過,別忘記了前面官方文檔的后半句話,它的意思是:
~~~
>>> la
[1, 2, 3, 'a', 'b', 'c']
>>> lb
['qiwsir', 'python']
>>> la[len(la):]=lb
>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']
~~~
list.extend(L) 等效于 list[len(list):] = L,L是待并入的list
聯想到到[上一講](_-113)中的一個list函數list.append(),這里的extend函數也是將另外的元素(只不過這個元素是列表)增加到一個已知列表中,那么兩者有什么不一樣呢?看下面例子:
~~~
>>> lst = [1,2,3]
>>> lst.append(["qiwsir","github"])
>>> lst
[1, 2, 3, ['qiwsir', 'github']] #append的結果
>>> len(lst)
4
>>> lst2 = [1,2,3]
>>> lst2.extend(["qiwsir","github"])
>>> lst2
[1, 2, 3, 'qiwsir', 'github'] #extend的結果
>>> len(lst2)
5
~~~
append是整建制地追加,extend是個體化擴編。
### list中某元素的個數
上面的len(L),可得到list的長度,也就是list中有多少個元素。python的list還有一個操作,就是數一數某個元素在該list中出現多少次,也就是某個元素有多少個。官方文檔是這么說的:
> list.count(x)
>
> Return the number of times x appears in the list.
一定要不斷實驗,才能理解文檔中精煉的表達。
~~~
>>> la = [1,2,1,1,3]
>>> la.count(1)
3
>>> la.append('a')
>>> la.append('a')
>>> la
[1, 2, 1, 1, 3, 'a', 'a']
>>> la.count('a')
2
>>> la.count(2)
1
>>> la.count(5) #NOTE:la中沒有5,但是如果用這種方法找,不報錯,返回的是數字0
0
~~~
### 元素在list中的位置
[《有容乃大的list(1)》](_-113)中已經提到,可以將list中的元素,從左向右依次從0開始編號,建立索引(如果從右向左,就從-1開始依次編號),通過索引能夠提取出某個元素,或者某幾個元素。就是如這樣做:
~~~
>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']
>>> la[2]
3
>>> la[2:5]
[3, 'a', 'b']
>>> la[:7]
[1, 2, 3, 'a', 'b', 'c', 'qiwsir']
~~~
如果考慮反過來的情況,能不能通過某個元素,找到它在list中的編號呢?
看官的需要就是python的方向,你想到,python就做到。
~~~
>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']
>>> la.index(3)
2
>>> la.index('a')
3
>>> la.index(1)
0
>>> la.index('qi') #如果不存在,就報錯
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'qi' is not in list
>>> la.index('qiwsir')
6
~~~
list.index(x),x是list中的一個元素,這樣就能夠檢索到該元素在list中的位置了。這才是真正的索引,注意那個英文單詞index。
依然是上一條官方解釋:
> list.index(x)
>
> Return the index in the list of the first item whose value is x. It is an error if there is no such item.
是不是說的非常清楚明白了?
先到這里,下講還繼續有容乃大的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