Python-List詳解python
列表(list)做爲python的一種數據類型,經常使用它進行一些複合數據的分組,list的形式是[value1,value2,value3,value4....valuen],list的每項數據不須要是同一類型,能夠是任意的python數據類型。app
>>> l1 = [1,2,3,'name',[1,2,3],{'age':18},(1,2,3)]ide
>>> l1函數
[1, 2, 3, 'name', [1, 2, 3], {'age': 18}, (1, 2, 3)]spa
list列表中的每一個元素是根據索引來進行位置標識,能夠經過指定索引範圍的方式來獲得想要的數據。對象
索引的第一位從0開始,最後一位能夠用-1表示,倒數第二位用-2表示,如此類推。排序
#可使用lst[index]的方式得到指定索引元素的值。索引
>>> l2內存
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]element
>>> l2[5]
5
>>> l2[1]
1
>>> l2[-1]
9
>>> l2[-3]
7
list列表的切片操做:
切片操做是python中對有序的數據類型最多見的一種操做,經過元素索引得到索引範圍內的一段數據。
經常使用格式爲:
lst[startindex:endindex:step]
起始索引:結束索引:步長,步長爲正數時,表示index+step,索引爲負數時爲index-step。
步長爲可選選項,不設置默認步長爲1
#python中的索引切片操做都是(n:m]的規則,即包含n不包含m,這點須要注意。
>>> l2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l2[0:5]表示,從索引0開始取,直到索引5爲止,但不包括索引5。即索引0,1,2,3,4,正好是5個元素。
>>> l2[0:5]
[0, 1, 2, 3, 4]
#步長爲2,每2位取一位數據。
>>> l2[0:5:2]
[0, 2, 4]
#經過切片反轉列表
>>> l5
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l5[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
#[:]這種形式下,startindex不指定默認爲的第一個索引(0),endindex不指定,表示取startindex到列表的最後一個元素。
>>> l2[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#列表的複製
>>> a = l2[:]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> id(a)
139895940789768
>>> id(l2)
139896080732808
>>> l3 = l1[3:]+l2[:5]
>>> l3
['name', [1, 2, 3], {'age': 18}, (1, 2, 3), 0, 1, 2, 3, 4]
>>>
#列表爲可變序列,列表中的元素都是可變的,可使用lst[index]=newvalue的方式來改變lst中元素的值
>>> l3
['name', [1, 2, 3], {'age': 18}, (1, 2, 3), 0, 1, 2, 3, 4]
>>> l3[1] = 'age'
>>> l3
['name', 'age', {'age': 18}, (1, 2, 3), 0, 1, 2, 3, 4]
>>>
#使用列表切片複製,能夠改變列表中一段的元素,或者徹底能清空列表。
>>> l3
['name', 'age', {'age': 18}, (1, 2, 3), 0, 1, 2, 3, 4]
>>> l3[2:4]=['newvalue1','newvalue2']
>>> l3
['name', 'age', 'newvalue1', 'newvalue2', 0, 1, 2, 3, 4]
>>> l3[-2:-1]
[3]
#切片賦值不須要索引個數等於newvalue的個數。
>>> l3[-2:-1]=['test1','test2','test3']
>>> l3
['name', 'age', 'newvalue1', 'newvalue2', 0, 1, 2, 'test1', 'test2', 'test3', 4]
#在指定索引位置插入一些數據。
>>> l4 = [1,2,3]
>>> l4[1:1] = ['new values',' new test',(1,2,3)]
>>> l4
[1, 'new values', ' new test', (1, 2, 3), 2, 3]
#在開始位置插入本身自己。
>>> l4[:0] = l4
>>> l4
[1, 'new values', ' new test', (1, 2, 3), 2, 3, 1, 'new values', ' new test', (1, 2, 3), 2, 3]
#清空列表
>>> l4[:] = []
>>> l4
[]
可使用內建函數len查詢list的長度。
>>> l5
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> len(l5)
11
>>>
列表的方法
列表是可變的數據類型,python爲其提供了一些方法,來對列表進行處理。
#爲列表增長元素。
| append(...)
| L.append(object) -> None -- append object to end
在列表結尾追加元素,沒有返回值。
>>> l1 = [1,2,3,4,5]
>>> l1.append(6)
>>> l1
[1, 2, 3, 4, 5, 6]
#清空列表,等效於l1[:]=[]。
| clear(...)
| L.clear() -> None -- remove all items from L
清空獵的全部元素,沒有返回值,
>>> l1
[1, 2, 3, 4, 5, 6]
>>> l1.clear()
>>> l1
[]
>>>
#列表拷貝,等效於l2=l1[:]
| copy(...)
| L.copy() -> list -- a shallow copy of L
列表的一個淺拷貝,返回一個新的list對象,拷貝生成的新對象,是在內存在從新定義的,跟原list沒關聯,因此淺拷貝和l2=l1這種賦值的形式是不一樣的。
>>> l2 = l1.copy()
>>> l2
[1, 2, 3, 4]
>>> l1
[1, 2, 3, 4]
>>> id(l1)
139895940823496
>>> id(l2)
139895940874312
#列表元素計數
| count(...)
| L.count(value) -> integer -- return number of occurrences of value
統計value在列表中出現的次數,返回次數的數值(integer)。
>>> l3
[1, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l3.count(2)
5
#列表追加可迭代對象。
| extend(...)
| L.extend(iterable) -> None -- extend list by appending elements from the iterable
用可迭代對象的元素來追加到列表,無返回值,這類可迭代對象但是list、str、dict等
>>> l1
[1, 2, 3, 4]
>>> t1=(1,2,3)
>>> l1.extend(t1)
>>> l1
[1, 2, 3, 4, 1, 2, 3]
#可迭代對象爲字典時,只會使用字典的key進行迭代添加。
>>> d1={'name':'zj','age':18}
>>> l1.extend(d1)
>>> l1
[1, 2, 3, 4, 1, 2, 3, 'name', 'age']
>>> s1="python"
>>> l1.extend(s1)
>>> l1
[1, 2, 3, 4, 1, 2, 3, 'name', 'age', 'p', 'y', 't', 'h', 'o', 'n']
>>>
#查找list中指定元素的索引
| index(...)
| L.index(value, [start, [stop]]) -> integer -- return first index of value.
| Raises ValueError if the value is not present.
查找元素索引第一次出現的位置,返回索引的數字,若是指定的元素不存在則拋出一個ValueError的異常。
[start,[stop]]爲可選參數,表示在指定的索引範圍內查找元素,start爲開始索引,stop爲結束索引,包含start,不包含stop。
>>> l1 = [1,2,3,4,5,6,7,2,8,9,10]
>>> l1.index(2)
1
>>> l1.index(2,3,10)
7
>>>
#list插入元素,等效於lst[index:index]=[value]
| insert(...)
| L.insert(index, object) -- insert object before index
在指定的索引位置前插入元素
>>> l5.insert(3,999)
>>> l5
[0, 1, 2, 999, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> l5[3:3]=[999]
>>> l5
[0, 1, 2, 999, 999, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>>
#刪除列表指定位置的元素, 並返回它. 若是沒有指定索引, a.pop 移除並返回列表的最後一個元素.
| pop(...)
| L.pop([index]) -> item -- remove and return item at index (default last).
| Raises IndexError if list is empty or index is out of range.
刪除並返回指定索引的元素(不指定index,默認刪除返回最後一個元素)
若是列表爲空,或者超出索引範圍,則拋出一個IndexError異常。
(函式原型的 [index] 在中方括號中,意味着它是一個可選參數, 而不是你應當在那裏鍵入一個方括號. 你將會在 Python 庫參考中常常見到這種表示法.)
>>> l6=[1,2,3,4,5,6,7]
>>> l6.pop()
7
>>> l6.pop(3)
4
>>> l6.pop(8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
>>>
#刪除指定的元素
| remove(...)
| L.remove(value) -> None -- remove first occurrence of value.
| Raises ValueError if the value is not present.
刪除list中第一次出現的指定元素值,沒有返回值,若是列表中有多個該元素,只會刪除第一個。
若是指定刪除的元素不存在,會拋出一個ValueError的異常
>>> l7=[1, 2, 3, 4, 5, 2, 2, 2, 6, 7, 8]
>>> l7.remove(2)
>>> l7
[1, 3, 4, 5, 2, 2, 2, 6, 7, 8]
>>> l7.remove(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>
#反轉列表
| reverse(...)
| L.reverse() -- reverse *IN PLACE*
就地反轉列表,沒有返回值。
>>> l8 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l8.reverse()
>>> l8
[9, 8, 7, 6, 5, 4, 3, 2, 1]
#列表排序
| sort(...)
| L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
就地列表進行排序,沒有返回值,
key爲指定排序方式,默認爲空,reverse爲是否對結果進行反轉,默認爲不反轉
>>> l9=[2, 1, 3, 6, 5, 4, 9, 8, 7, 1]
>>> l9.sort()
>>> l9
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l9=[2, 1, 3, 6, 5, 4, 9, 8, 7, 1]
>>> l9.sort(re)
repr( return reversed(
>>> l9.sort(reverse=True)
>>> l9
[9, 8, 7, 6, 5, 4, 3, 2, 1, 1]
>>>