列表(list)
1.創建列表
(1).直接創建
number = [1,2,3,4,'你好']
(2).通過list()創建,開發過程中常用來進行其他數據類型向列表數據的強制轉換
a = list(range(10,20,2))
print(a)
結果:
[10, 12, 14, 16, 18]
(3).通過表達式創建列表,語法結構[數學表達式 條件1 條件2 條件3…]
list1 = [x ** 2 for x in range(1,9) if x&1 == 0]
print(list1)
結果:
[4, 16, 36, 64]
(4).生成器
在編程中,我們有時需要生成一個列表,但是該列表可能佔據大量的內存,此時列表直接加載到內存中就不再可取了,python提供一個列表生成器,列表生成器是一段生成對應列表的算法。
優點: 節省內存; 提高程序運行效率.
列表生成器每一次迭代,生成器產生的對應的數會被回收。
列表生成器的兩種寫法:
將列表的 [ ] 改成 ()
下面是一個列表:
a = [x for x in range(10)]
print(type(a))
結果:
<class 'list'>
此時,將 [ ] 改成 ()
a = (x for x in range(10))
print(type(a))
結果:
<class 'generator'>
遍歷可以查看a的所有值,但當你將a的所有值遍歷一遍後,a對應的列表就會被銷燬。
for i in a:
print(i)
除了用遍歷查看a的值外,還可以用next( a )來查看a的值,next( a )查看a的值每次只能查看一個,從0開始,到9結束,當再次執行next( a )時返回stoplteration。
比如下列代碼:
a = (x for x in range(10))
print(type(a))
print(next(a))
結果:
<class 'generator'>
0
當多添加幾個print(next(a))時,就會接着往下生成數據,如下:
a = (x for x in range(10))
print(type(a))
print(next(a))
print(next(a))
print(next(a))
結果:
<class 'generator'>
0
1
2
當最後一個數字9生成以後,再執行print(next(a))時,返回stoplteration。
將函數轉化爲列表生長器 yield
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))
結果:
starting...
4
********************
res: None
4
解釋:
1.程序開始執行以後,因爲foo函數中有yield關鍵字,所以foo函數並不會真的執行,而是先得到一個生成器g(相當於一個對象)
2.直到調用next方法,foo函數正式開始執行,先執行foo函數中的print方法,然後進入while循環
3.程序遇到yield關鍵字,然後把yield想想成return,return了一個4之後,程序停止,並沒有執行賦值給res操作,此時next(g)語句執行完成,所以輸出的前兩行(第一個是while上面的print的結果,第二個是return出的結果)是執行print(next(g))的結果
4.程序執行print("*"20),輸出20個
5.又開始執行下面的print(next(g)),這個時候和上面那個差不多,不過不同的是,這個時候是從剛纔那個next程序停止的地方開始執行的,也就是要執行res的賦值操作,這時候要注意,這個時候賦值操作的右邊是沒有值的(因爲剛纔那個是return出去了,並沒有給賦值操作的左邊傳參數),所以這個時候res賦值是None,所以接着下面的輸出就是res:None,
6.程序會繼續在while裏執行,又一次碰到yield,這個時候同樣return 出4,然後程序停止,print函數輸出的4就是這次return出的4.
2.增
有append()、extend()和insert()三種方法
(1).append() 將元素添加到列表末尾
number = [0,1,2,3,4]
number.append(5)
print(number)
結果:
[0, 1, 2, 3, 4, 5]
(2).extend()方法可以添加多個元素,但是必須以列表的形式添加
number = [0,1,2,3,4]
number.extend([5,6])
print(number)
結果:
[0, 1, 2, 3, 4, 5, 6]
(3).前兩種方法均將元素添加到列表末尾,如果想插隊的話就需要使用insert()方法了
number = [0,1,2,3,4]
number.insert(2,1)
print(number)
結果:
[0, 1, 1, 2, 3, 4]
insert(2,1)中2指位置,1是需要添加的元素(列表第一個元素所在位置爲0)。
3.刪
列表中刪除元素一共有remove()、del和pop()三種方法
(1).remove():需要知道列表中已經存在的元素,這樣纔可以實現元素的刪除
number = ['羅','思','洋']
number.remove('羅')
print(number)
結果:
['思', '洋']
(2).當我們需要刪除指定位置的元素時,就需要使用del方法
number = ["羅",'思','洋']
del number[0]
print(number)
del後直接跟列表名可以刪除整個列表。
(3).pop()方法可以彈出元素,若無指定索引值作爲參數時默認彈出最後一個元素
number1 = ["羅",'思','洋']
print(number1.pop())
number2 = ["羅",'思','洋']
print(number2.pop(0))
print(number1)
print(number2)
結果:
洋
羅
['羅', '思']
['思', '洋']
使用三種方法都可以實現元素的刪除。
4.改
根據下標修改
number = ["羅",'思','洋']
number[0] = 5
print(number)
結果:
[5, '思', '洋']
5.查
(1).索引
fruits=['apple','peach','Lemon','Pear','Banana','watermelon']
print(fruits[0:2])
結果:
['apple', 'peach']
也可以輸入單個索引值查詢一個元素
(2).for遍歷查詢
for i in team:
print(i)
或者:
team = ['火箭','勇士','開拓者','爵士','鵜鶘','馬刺','雷霆']
for index,item in enumerate(team):
print(index + 1,item)
結果:
1 火箭
2 勇士
3 開拓者
4 爵士
5 鵜鶘
6 馬刺
7 雷霆
補充enumerate():枚舉,輸出下標及值
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
輸出:
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]