此前已經學過的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語言基礎,一定會很快吸收的,如果沒有的話,則需要花費一定的時間。如有不足之處,請多多指教,包含。
明天更新比較列表和字符串。