Python學習之列表List()

此前已經學過的Python的基本對象類型:int 、 float、 str
list在Python中也是一種基本的對象類型。
定義
在Python中,通常使用list:[ ]來表示列表,在[ ]中的元素可以是int,float,str甚至也可以是boolean類型值和dict(以後會提到講解)字典,這就比java和類C語言的數組方便多了,這類編程語言,在定義的數組中,首先對數據進行聲明,聲明的類型確定了數組中需要存放什麼樣的元素。int ,float,string,char,都是先定義,後存放。
但是在Python中,這個list:[ ]可以說是功能非常強大。
示例:

>>> a = [ ]              #定義一個空列表
>>> type(a)              #查看a的類型
<type 'list'>
>>> bool(a)              #查看列表a的bool值,如果爲空返回false,否則返回true
False
>>> print a
[]
>>> 

示例非空列表

>>> a = [2,'a','string','python','java','c++']
>>> type(a)
<type 'list'>
>>> bool(a)
True
>>> print a
[2, 'a', 'string', 'python', 'java', 'c++']
>>> 

思考:在Python中,list可以存放多少元素呢?
答案:如果你的計算機硬件多高,就可以容納多少的元素,簡直是有容乃大呀!

列表中的索引和切片
關於索引和切片我們在學習字符串的時候已經瞭解了,但是再這裏還是不得不在操作一番。
首先來看一下字符串中關於索引和切片的用法

>>> a = "I love Python, I wanna to learn python well"
>>> print a
I love Python, I wanna to learn python well
>>> a[1]
' '
>>> a[2]
'l'
>>> a[5]
'e'
>>> a[:1]
'I'
>>> a[:-1]
'I love Python, I wanna to learn python wel'
>>> a[:-5]
'I love Python, I wanna to learn python'
>>> a[1:6]
' love'
>>> a[-4:-8]           #注意這一條,在這裏我們發現什麼也沒有輸出,在Python中,
                       #start開始的值一定要比stop結束的值小。
''
>>> a[-8:-4]
'hon '
>>> 

在列表中,也有和字符串類似的操作

>>> a = [4,1,'a','java','objective-c','c++','Python','www.baidu.com']
>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[0]
4
>>> a[2]
'a'
>>> a[:3]
[4, 1, 'a']
>>> a[3:6]
['java', 'objective-c', 'c++']
>>> a[-5:-2]
['java', 'objective-c', 'c++']
>>> a[-2:-5]            #原因通字符串解釋,這是Python中的規則,不能違背。哈哈
[]
>>> 

在[ 下標 ]中,其實,下表就是用來訪問元素在list中的位置,從0開始,到len(list)-1結束。
我們可以通過index來檢測。

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[3]
'java'
>>> a.index("java")
3
>>> a = "I love python"
>>> a[5]
'e'
>>> a.index('e')
5
>>> 

列表中的反轉
在Python中,對於列表中的元素進行反轉,有兩種方式。
方法一:
利用[ :: -1]

>>> a = [4,1,'a','java','objective-c','c++','Python','www.baidu.com']
>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[::-1]
['www.baidu.com', 'Python', 'c++', 'objective-c', 'java', 'a', 1, 4]
>>> 

當然,對於字符串也是適用的。

>>> string = 'Python'
>>> print string
Python
>>> string[::-1]
'nohtyP'
>>> 

其實上面這種方法很多時候會讓人覺得迷茫,個人更習慣於使用Python中的內建模塊reversed()
方法二:reversed( )函數

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> list(reversed(a))
['www.baidu.com', 'Python', 'c++', 'objective-c', 'java', 'a', 1, 4]
>>> 

關於reversed函數:

Help on class reversed in module __builtin__:

class reversed(object)
 |  reversed(sequence) -> reverse iterator over values of the sequence
 |  
 |  Return a reverse iterator
 |  
 |  Methods defined here:
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |  
:

意思大概是它返回一個迭代的對象。iterator(迭代),感覺是不是又學了一個新單詞,個人覺得,學習編程語言的時候,不管學沒學會,英語單詞倒是記住了很多。並且很專業。允許我笑一會兒,哈哈哈哈哈哈!

對List的操作,和字符串一樣
len( )統計列表元素的個數

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> b = ['I','Love','Python']
>>> print b
['I', 'Love', 'Python']
>>> len(a)
8
>>> len(b)
3
>>> 

” + “連接兩個序列

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> print b
['I', 'Love', 'Python']
>>> print a+b
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com', 'I', 'Love', 'Python']
>>> 

in 判斷某個元素是否在列表中,如果存在於列表中,返回true,如果不在,返回false

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> print b
['I', 'Love', 'Python']
>>> "java" in a
True
>>> "VC++" in a
False
>>> "Love" in b
True
>>> "Like" in b
False
>>> 

“ * ”將列表中的元素進行重複顯示

>>> print b
['I', 'Love', 'Python']
>>> print b * 3
['I', 'Love', 'Python', 'I', 'Love', 'Python', 'I', 'Love', 'Python']
>>> 

max( )和min( )

>>> print a
[4, 1, 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> max(a)
'www.baidu.com'
>>> min(a)
1
>>> 

cmp( )比較函數,全部相同,返回0,一個相同,返回1,全不相同,返回-1

>>> c = [1,2]
>>> b = [1,3]
>>> print c,b
[1, 2] [1, 3]
>>> cmp(c,b)
-1
>>> la = [2]
>>> cmp(c,la)
-1
>>> lc = [1]
>>> cmp(c,lc)
1
>>> lb = [1,3]
>>> cmp(b,lb)
0
>>> 

* 在列表中追加元素*
在Python中,對列表中的元素進行追加,使用append函數

第一種方法:直接使用list.append(元素)

>>> b = ["I","LOVE"]
>>> print b
['I', 'LOVE']
>>> b.append("PYTHON")
>>> print b
['I', 'LOVE', 'PYTHON']
>>> b.append(4321)
>>> print b
['I', 'LOVE', 'PYTHON', 4321]
>>> 

第二種方法:使用list[len(list):]=[x]

>>> print b
['I', 'LOVE', 'PYTHON', 4321]
>>> b[len(b):]=["JAVA"]
>>> print b
['I', 'LOVE', 'PYTHON', 4321, 'JAVA']
>>> 

列表中的函數
Python中的函數有哪些?

dir(list)
[‘add‘, ‘class‘, ‘contains‘, ‘delattr‘, ‘delitem‘, ‘delslice‘, ‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘, ‘getitem‘, ‘getslice‘, ‘gt‘, ‘hash‘, ‘iadd‘, ‘imul‘, ‘init‘, ‘iter‘, ‘le‘, ‘len‘, ‘lt‘, ‘mul‘, ‘ne‘, ‘new‘, ‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘reversed‘, ‘rmul‘, ‘setattr‘, ‘setitem‘, ‘setslice‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘, ‘append’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]

請注意以上沒有下劃線的’append’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’.
其中有兩三個我們已經接觸過了,我們試試其他的。
extend函數

>>> a = ["I","Love"]
>>> b = ["Python"]
>>> a.extend(b)
>>> print a
['I', 'Love', 'Python']
>>> 

我們發現將兩個列表合併在一起了,這和我們之前提到過的” + “連接相似

>>> print a+b
['I', 'Love', 'Python']
>>> print a
['I', 'Love']
>>> print b
['Python']
>>> 

不過二者是有區別的,+只是單純的將兩個列表拼接在一個,而extend將一個列表追加到另一個列表當中。
思考:extend會不會將字符串追加到list列表中呢?

>>> print a
['I', 'Love']
>>> b = "Python"
>>> a.extend(b)
>>> print a
['I', 'Love', 'P', 'y', 't', 'h', 'o', 'n']
>>> 

哈哈哈哈,我們發現可以的,但是把字符串拆成了單個字符追加進去了。extend其實就是繼承,就如同java中面向對象的三大特性之一繼承
extend也可以採用list[len(list):]=[x]的方式追加。

>>> print a
['I', 'Love', 'P', 'y', 't', 'h', 'o', 'n']
>>> print a
['I', 'Love', 'P', 'y', 't', 'h', 'o', 'n']
>>> b = ["Java"]
>>> a[len(a):]=["Java"]
>>> print a
['I', 'Love', 'P', 'y', 't', 'h', 'o', 'n', 'Java']
>>> 

思考,如果我們再List中extend一個數值類型的,會不會成功?

>>> print a
['I', 'Love', 'P', 'y', 't', 'h', 'o', 'n', 'Java']
>>> c = 5
>>> a.extend(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 

哇,好神奇,竟然報錯了,怎麼辦?
你看typeError呀,真笨,哈哈哈,發現提示說int不是一個可迭代的對象。
那麼問題來了,怎麼判斷一個對象是不是可迭代的呢?
答案是hasattr(變量名稱,’iter‘)

>>> list = "Java"
>>> hasattr(list,'__iter__')
False
>>> list = ["java","c++"]
>>> hasattr(list,'__iter__')
True
>>> 

所以現在應該知道該如何使用extend了吧!學會了這個會不會突然好開心。

>>> print list
['java', 'c++']
>>> a = [1,2,4]
>>> list.extend(a)
>>> print list
['java', 'c++', 1, 2, 4]
>>> 

count( )函數,統計列表中元素出現的個數

>>> a = [1,32,32,1,5,1,6]
>>> print a
[1, 32, 32, 1, 5, 1, 6]
>>> a.count(1)
3
>>> a.count(32)
2
>>> 

insert(位置,元素),在指定的位置插入一個元素

>>> a = ["this","is","Python"]
>>> a.insert(2,"a")
>>> print a
['this', 'is', 'a', 'Python']
>>> a.insert(3,"!")
>>> print a
['this', 'is', 'a', '!', 'Python']
>>> a.insert(10,"!")
>>> print a
['this', 'is', 'a', '!', 'Python', '!']
>>> 

list.pop([i] )和List.remove( )函數,刪除列表中的某一個元素
首先來看list.pop( )函數

>>> a = ["I","Love","Python","1",4]
>>> print a
['I', 'Love', 'Python', '1', 4]
>>> a.pop(3)
'1'
>>> print a
['I', 'Love', 'Python', 4]
>>> 

我們發現是按照元素的下標進行刪除列表中的元素。
再來看看list.remove( )函數

>>> a = ["I","Love","Python","1",4]
>>> print a
['I', 'Love', 'Python', '1', 4]
>>> a.remove('1')
>>> print a
['I', 'Love', 'Python', 4]
>>> a.remove(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> 

我們發現list.remove是對列表中的元素進行檢索匹配,如果存在則刪除,如果不存在,則報錯。
以上就是今天所學習的全部內容,如果你有Java和類C語言基礎,一定會很快吸收的,如果沒有的話,則需要花費一定的時間。如有不足之處,請多多指教,包含。
明天更新比較列表和字符串

發佈了47 篇原創文章 · 獲贊 16 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章