目錄
1、列表的定義
序列是python中最基本的數據結構,序列都可以使用索引來查詢它的元素。列表就是序列的一種。
序列可以進行的操作包含:索引、切片、加、乘,檢查成員還可以使用len()方法,以及max()和min()方法
- 列表(list)是處理一組有序項目的數據結構
- 列表中可以支持各種數據類型,例如字符,數字,字符串甚至可以嵌套列表,元組,字典等
- 列表用[]標示,內部元素用,隔開。
2、列表的創建
2.1、創建普通列表
示例:
>>> list1=[]
>>> print(list1)
[]
>>> list2=[1,2,3,"a",(1,2,3,4),[1,2,3],{2:2}]
>>> print(list2)
[1, 2, 3, 'a', (1, 2, 3, 4), [1, 2, 3], {2: 2}]
>>>
2.2、利用range創建列表
range()函數是一個迭代器,不能使用list中的屬性,如果想要轉換成list,需要轉化下。
注意事項:range是[)左閉右開區間。
示例:
>>> a=list(range(1,10,2))
>>> a
[1, 3, 5, 7, 9]
>>>
2.3、列表的複製功能
2.31、引用複製
引用複製就是指的是兩個列表的地址是同樣的,改變其中一個的內容,另一個會相應的進行改變。
因爲引用複製,是指向的是內存中的同一個地址。
示例:
>>> a
[1, 3, 5, 7, 9]
>>> b=a
>>> id(a)
2486756193864
>>> id(b)
2486756193864
>>> a.append("a")
>>> a
[1, 3, 5, 7, 9, 'a']
>>> b
[1, 3, 5, 7, 9, 'a']
>>> id(a)
2486756193864
>>> id(b)
2486756193864
>>>
2.32、非引用複製
非引用複製功能,是利用切片進行復制,兩個列表的地址是不一樣的,所以修改其中的一個列表中的值,另一個列表中的值不發生改變。
示例:
>>> a
[1, 3, 5, 7, 9, 'a']
>>> c=a[:]
>>> id(a)
2486756193864
>>> id(c)
2486756178056
>>> a.append("hello")
>>> a
[1, 3, 5, 7, 9, 'a', 'hello']
>>> c
[1, 3, 5, 7, 9, 'a']
>>> id(a)
2486756193864
>>> id(c)
2486756178056
>>>
2.4、增加列表元素
2.41、append()方法
- 在列表的末尾增加元素,輸入啥就增加啥,如果append元素是字典,也是將整個字典當爲一個元素加進列表的末端。
示例:
>>> a=[1,2,3,4,5]
>>> a.append([1,23])
>>> a
[1, 2, 3, 4, 5, [1, 23]]
>>>
2.42、extend()方法
- extend只能接受序列,且把這個序列中的每個元素都添加到原list中取去。
示例:
>>> a
[1, 2, 3, 4, 5, [1, 23]]
>>> a.extend(("a","b","c"))
>>> a
[1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>>
2.43、insert()方法
- insert()方法是指定的對象插入列表的指定位置。
示例:
>>> a
[1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>> a.insert(0,"hello")
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>>
2.5、刪除列表元素
2.51、pop()方法
- pop()函數是用於移除列表中的一個元素,當不填寫索引值的時候,默認取出列表中的最後一個元素,然後在列表中去掉。返回值是取出的那個元素對象。
示例:
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b', 'c']
>>> a.pop()
'c'
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a', 'b']
>>> a.pop()
'b'
>>> a
['hello', 1, 2, 3, 4, 5, [1, 23], 'a']
>>> a.pop(1)
1
>>> a
['hello', 2, 3, 4, 5, [1, 23], 'a']
>>>
2.52、del()方法
- 刪除整個列表 :del 列表名稱
- 刪除列表中的某個元素: del 列表[索引值]或者是切片形式。
示例:
>>> a
['hello', 2, 3, 4, 5, [1, 23], 'a']
>>> del a #刪除整個列表
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> b=[1,2,3,4,5,6]
>>> del b[1:4] #刪除列表的固定區域的元素
>>> b
[1, 5, 6]
>>>
2.53、remove()方法
- remove()函數用於移除列表中某個值的第一個匹配項
示例:
>>> b=[1,2,3,"a","bc",(1,2,4)]
>>> b.remove(3)
>>> b
[1, 2, 'a', 'bc', (1, 2, 4)]
>>> b.remove("bc")
>>> b
[1, 2, 'a', (1, 2, 4)]
>>>
2.54、clear()方法
- clear()函數用於清空列表,相當於del a[:]
示例:
>>> a=[1,2,3,4,5]
>>> a.clear()
>>> a
[]
>>>
3、列表常用函數和方法
3.1、len(): 查看列表中元素的個數
示例:
>>> a=[1,2,3,4,5,"a"]
>>> len(a)
6
>>>
3.2、split():字符串切換成列表
拆分字符串,通過指定的分隔符對字符串進行切片,並返回分割後的字符串列表。
語法:
字符串.split(str="",num)[n]
- str:表示分隔符,默認爲空格,但是不能爲空("")。若是字符串中沒有分隔符,則把整個字符串作爲列表中的一個元素。
- num:表示分割次數,如果存在參數num,則僅僅分割num+1個子字符串,並且每個字符串可以賦予新的變量。
- [n]:表示選取的切片值。
示例1:默認分隔符:空格
>>> a="i am a good boy"
>>> a.split()
['i', 'am', 'a', 'good', 'boy']
>>>
示例2:使用分隔符:“.”
>>> s="www.beta.pool.btc.com"
>>> s.split(".")
['www', 'beta', 'pool', 'btc', 'com']
>>>
示例3:分割次數示例
>>> s
'www.beta.pool.btc.com'
>>> s.split(".",2)
['www', 'beta', 'pool.btc.com']
>>>
3.3、reverse():反向列表元素
方法1:reverse()
方法2:切片[::-1]
示例:
>>> s
'www.beta.pool.btc.com'
>>> c=s.split(".")
>>> c.reverse()
>>> c
['com', 'btc', 'pool', 'beta', 'www']
>>>
3.4、count():統計某個元素出現的次數。
示例:
>>> c=[1,2,3,4,2,3,4,4,]
>>> c.count(4)
3
>>> c.count("a")
0
>>>
3.5、sort() :對原列表進行排序
對原列表進行排序,根據ascii碼從大到小進行排序,也可以直接在序列上進行排序,沒有返回值。
語法:
L.sort(key=None,reverse=False)
- key:也是一個函數,這個函數會從每一個元素中提取一個用於比較的關鍵字。默認爲none
- reverse:False:順序,True:逆序
注意事項:
注意語法中"key=" 是不能缺少的,這個key可以是一個函數。
示例1:按照序列的長度進行倒敘排列
list1=[(1,2,3),(1,2,3,5),(1,2,4,3,2,4,3,4,5,6,3),(4,)]
def L(tup):
return len(tup)
list1.sort(key=L,reverse=True)
print(list1)
結果:
============================== RESTART: E:\a.py ==============================
[(1, 2, 4, 3, 2, 4, 3, 4, 5, 6, 3), (1, 2, 3, 5), (1, 2, 3), (4,)]
>>>
示例2:找出下面英文句子中最長的單詞:S=“I am a good boy! hi, glory road”
#coding=utf-8
import string
s="I am a good boy! hi,glory road"
#result:是將單詞中帶的標點符號,轉換爲空格
result=""
for i in s:
if i in string.punctuation:
result+=" "
else:
result+=i
#將字符串中的單詞都放在list中
word_list=result.split(" ")
#利用列表的sort函數進行排序
word_list.sort(key=lambda x :len(x),reverse=True)
print("最長的單詞爲:",word_list[0])
結果:
============================== RESTART: E:\a.py ==============================
最長的單詞爲: glory
>>>
3.6、sorted()函數
sorted函數和sort函數對於列表最大的不同就是:
1)sorted函數是重新生成一個列表,不改變原來的列表,sorted可以用於一切可迭代的對象、
2)sort函數是在原有的序列中進行排序功能,僅僅只有list有sort函數功能
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> c=sorted(a)
>>> c
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>> c=sorted(a)
>>> c
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> a
[1, 3, 5, -1, 0, 30, -4, 2]
>>>
3.7、推導列表
推導列表本質上是把列表推導式理解成一個集合了變換和篩選功能的函數,聽過這個函數把一個列表轉換成一個新的列表,是生成了另一個列表,原來列表保持不變。
語法:
[表達式 for 變量 in 列表] 或者[表達式 for 變量 in 列表 if 條件 ]
示例1:列表元素平方
>>> a
[-4, -1, 0, 1, 2, 3, 5, 30]
>>> print([x**2 for x in a if x>0])
[1, 4, 9, 25, 900]
>>>
示例2:二維矩陣的轉置:a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> print([[j[i] for j in a]for i in range(3)])
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
>>>
思路解析:
原來列表的順序爲:
[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
共有4行,此時要轉爲3行,所以程序中有個for i in range(3),i也代表原列表中的列的個數
接着查看每行的內容是什麼,應該是元列表中每列的第i個元素組成的列表,成爲新的元素。
怎麼取到的,就是 j[i] for j in a, j相當於原來列表中的每行內容。
舉例說明:
當i=0時, j[0] -->1,4,7,10 取每一行的第0個元素組成新的列表。
當i=1是 j[1] -->2,5,8,11 取每一行的第1個元素組成新的列表。