此前已經學過的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 = [,'a','string','python','java','c++']
>>> type(a)
<type 'list'>
>>> bool(a)
True
>>> print a
[, '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[]
' '
>>> a[]
'l'
>>> a[]
'e'
>>> a[:]
'I'
>>> a[:-]
'I love Python, I wanna to learn python wel'
>>> a[:-]
'I love Python, I wanna to learn python'
>>> a[:]
' love'
>>> a[-:-] #注意這一條,在這裡我們發現什麼也沒有輸出,在Python中,
#start開始的值一定要比stop結束的值小。
''
>>> a[-:-]
'hon '
>>>
在清單中,也有和字元串類似的操作
>>> a = [,,'a','java','objective-c','c++','Python','www.baidu.com']
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[]
>>> a[]
'a'
>>> a[:]
[, , 'a']
>>> a[:]
['java', 'objective-c', 'c++']
>>> a[-:-]
['java', 'objective-c', 'c++']
>>> a[-:-] #原因通字元串解釋,這是Python中的規則,不能違背。哈哈
[]
>>>
在[ 下标 ]中,其實,下表就是用來通路元素在list中的位置,從0開始,到len(list)-1結束。
我們可以通過index來檢測。
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[]
'java'
>>> a.index("java")
>>> a = "I love python"
>>> a[]
'e'
>>> a.index('e')
>>>
清單中的反轉
在Python中,對于清單中的元素進行反轉,有兩種方式。
方法一:
利用[ :: -1]
>>> a = [,,'a','java','objective-c','c++','Python','www.baidu.com']
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> a[::-]
['www.baidu.com', 'Python', 'c++', 'objective-c', 'java', 'a', , ]
>>>
當然,對于字元串也是适用的。
>>> string = 'Python'
>>> print string
Python
>>> string[::-]
'nohtyP'
>>>
其實上面這種方法很多時候會讓人覺得迷茫,個人更習慣于使用Python中的内模組化塊reversed()
方法二:reversed( )函數
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> list(reversed(a))
['www.baidu.com', 'Python', 'c++', 'objective-c', 'java', 'a', , ]
>>>
關于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
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> b = ['I','Love','Python']
>>> print b
['I', 'Love', 'Python']
>>> len(a)
>>> len(b)
>>>
” + “連接配接兩個序列
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> print b
['I', 'Love', 'Python']
>>> print a+b
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com', 'I', 'Love', 'Python']
>>>
in 判斷某個元素是否在清單中,如果存在于清單中,傳回true,如果不在,傳回false
>>> print a
[, , '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 *
['I', 'Love', 'Python', 'I', 'Love', 'Python', 'I', 'Love', 'Python']
>>>
max( )和min( )
>>> print a
[, , 'a', 'java', 'objective-c', 'c++', 'Python', 'www.baidu.com']
>>> max(a)
'www.baidu.com'
>>> min(a)
>>>
cmp( )比較函數,全部相同,傳回0,一個相同,傳回1,全不相同,傳回-1
>>> c = [,]
>>> b = [,]
>>> print c,b
[, ] [, ]
>>> cmp(c,b)
-
>>> la = []
>>> cmp(c,la)
-
>>> lc = []
>>> cmp(c,lc)
>>> lb = [,]
>>> cmp(b,lb)
>>>
* 在清單中追加元素*
在Python中,對清單中的元素進行追加,使用append函數
第一種方法:直接使用list.append(元素)
>>> b = ["I","LOVE"]
>>> print b
['I', 'LOVE']
>>> b.append("PYTHON")
>>> print b
['I', 'LOVE', 'PYTHON']
>>> b.append()
>>> print b
['I', 'LOVE', 'PYTHON', ]
>>>
第二種方法:使用list[len(list):]=[x]
>>> print b
['I', 'LOVE', 'PYTHON', ]
>>> b[len(b):]=["JAVA"]
>>> print b
['I', 'LOVE', 'PYTHON', , '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 =
>>> a.extend(c)
Traceback (most recent call last):
File "<stdin>", line , 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 = [,,]
>>> list.extend(a)
>>> print list
['java', 'c++', , , ]
>>>
count( )函數,統計清單中元素出現的個數
>>> a = [,,,,,,]
>>> print a
[, , , , , , ]
>>> a.count()
>>> a.count()
>>>
insert(位置,元素),在指定的位置插入一個元素
>>> a = ["this","is","Python"]
>>> a.insert(,"a")
>>> print a
['this', 'is', 'a', 'Python']
>>> a.insert(,"!")
>>> print a
['this', 'is', 'a', '!', 'Python']
>>> a.insert(,"!")
>>> print a
['this', 'is', 'a', '!', 'Python', '!']
>>>
list.pop([i] )和List.remove( )函數,删除清單中的某一個元素
首先來看list.pop( )函數
>>> a = ["I","Love","Python","1",]
>>> print a
['I', 'Love', 'Python', '1', ]
>>> a.pop()
'1'
>>> print a
['I', 'Love', 'Python', ]
>>>
我們發現是按照元素的下标進行删除清單中的元素。
再來看看list.remove( )函數
>>> a = ["I","Love","Python","1",]
>>> print a
['I', 'Love', 'Python', '1', ]
>>> a.remove('1')
>>> print a
['I', 'Love', 'Python', ]
>>> a.remove()
Traceback (most recent call last):
File "<stdin>", line , in <module>
ValueError: list.remove(x): x not in list
>>>
我們發現list.remove是對清單中的元素進行檢索比對,如果存在則删除,如果不存在,則報錯。
以上就是今天所學習的全部内容,如果你有Java和類C語言基礎,一定會很快吸收的,如果沒有的話,則需要花費一定的時間。如有不足之處,請多多指教,包含。
明天更新比較清單和字元串。