列表操作 :[ ]
1.1列表增加:
append:整體插入
extend:迭代插入(只迭代一級)
li = ['Jerry','Tony','女神','Alex']
li.append('陽關') # 整體插入
li.extend('夜晚') # 迭代插入
1.2添加示例:
bl=[]
while 1 :
add = input('請輸入要添加的值(q退出):')
if add == 'q':
break
else:
bl.append(add)
2.按索引插入,必須兩個參數缺一不可:insert(位置,內容)
li.insert(4, '辛巳')
3.按索引刪除,當參數爲空時默認刪除最後一個:pop(0
li.pop(4)
# li.pop() # 默認刪最後一個
4.清空:claer
li.clear()
5.切片刪除:del li[ : ]
直接刪除整個列表:del li
del li[5:]
6.修改, 切片修改先把值取出,然後在按迭代(只迭代一級)插入要修改值
li[4] = '男神'
li[0:2] = '生日快樂'
li[0:2] = {1,2,3,'生日快樂','天方夜譚'}
7.查詢
for i in li:
print(li[0:2])
8.公共方法
8.1列表長度:len()
l = len(li)
8.2計算列表中的元素個數
l1 = li.count('女神')
8.3列表的查詢只有index,查找不到報錯
print(li.index('女神'))
8.4排序功能:sort()
li = [1, 5, 3, 7, 6, 9, 2]
# 正序
li.sort()
# 倒敘
li.sort(reverse=True)
8.5反轉:reverse()
li.reverse()
9.元祖的操作 : ( ) tuple
元祖中若只有一個元素如果後面沒有逗號,那這個元素是什麼數據類型,就是什麼類型,有逗號的情況纔是元素數據類型
元祖爲只讀列表,允許查詢和切片
兒子不能改,孫子可能可以改
tu = (1, 2, 3, 'alex', [1, 2, 3], 'running')
print(tu[0:4])
tu[4][0] = 5
print(tu)
for i in tu:
print(i)
10.連接與拆分 join的迭代拼接中要求被拼接對象只能是字符串,不能包括數字以及其他列表,也只迭代一級
連接:列表轉化爲字符串 連接符.join(列表)
拆分:字符串轉化爲列表 字符串.split(以某字符作爲拆分)
s = ['shut up', 'hurry', 'abc', '笑笑']
s1 = '_'.join(s)
print(s1)
11.1range 顧頭不顧尾的數字範圍,第三個參數是步長
for i in range(0,10,2):
print(i)
for n in range(10, 0, -1):
print(n)
# 如果開始與結束的方向 與步長的方向相反,那麼也不會報錯直接不執行無結果
for n in range(0, 10, -1):
print(n)
# 如果只包括一個一個數值,那麼就相當於一整個數組的[0:10]
for n in range(10):
print(n)
11.2示例
# 輸出列表中的全部元素,包括列表中的深層列表全部分開打印出來
b = [1, 2, 3, 4, 5, [1, 2, 3, 'sunday'], '笑容的代表', '美麗人生']
for i in range(len(b)):
if type(b[i]) == list:
for j in b[i]:
print(j)
else:
print(b[i])
12.列表中列表名相當於是一個指向內存地址的指針 = 會將地址賦值,與單個字符不同單個字符的賦值只是相當於簡單的賦值運算
a = []
b = a
c = a
a.append('a')
print(a, b, c) # 結果a,a,a
z = 0
x = z
v = z
z = 1
print(z, x, v) # 結果1 0 0
13.深淺copy
13.1copy的一級賦值
copy賦值操作完成,相當於重新定義了一個列表將值賦給此列表,copy只會將數值賦值,當修改l2時其數值不會影響l1
l1 = [1, 2, 3]
l2 = l1.copy()
print(l1, l2)
print(id(l1), id(l2))
l2.append('a')
print(l1, l2)
13.2copy的多級賦值
copy的第一級雖然是直接賦值,但是內部的多級列表儲存的是地址,因此改變一個的值也會相應改變其他的copy列表的值
l1 = [1, 2, [4, 5, 6], 3]
l2 = l1.copy()
print(l1, id(l1))
print(l2, id(l2))
l1.append('a')
print(l1, l2)
l1[2].append('a')
print(l1, l2)
print(id(l1[2]))
print(id(l2[2]))
13.3 deepcopy
deepcopy會將內部的多級列表也變成普通的數值賦值,改變一個不會影響deepcopy的數值,目前測試過的第二級的列表值已經不會隨着被copy元素的改變而改變了
import copy
l1 = [1, 2, 3, [4, 5, 6], 7]
l2 = copy.deepcopy(l1)
print(l1, id(l1))
print(l2, id(l2))
l1.append('a')
print(l1, l2)
l1[3].append('a')
print(l1, l2)
13.4切片賦值
切片賦值就相當於是簡單的copy,多級(可迭代對象)也存儲爲地址類型
l1 = [1, [1], 2, 3, 4]
l2 = l1[:]
l1[1].append('a')
print(l1, id(l1))
print(l2, id(l2))
print(l1[1] is l2[1])
14 enumerate:目前看來可以選擇列表循環的開始值,循環還是按照整個列表循環的,只是初始數值不再是0,而變成自己賦的值
li = ['alex', 'taibai', 'wusir', 'egon']
for i in li:
print(li.index(i),i)
for j,i in enumerate(li,1):
print(j,i)
15.列表總結
16.元祖以及copy小結