天天看點

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 = [,'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語言基礎,一定會很快吸收的,如果沒有的話,則需要花費一定的時間。如有不足之處,請多多指教,包含。

明天更新比較清單和字元串。