列表具有的特性/功能
- 有順序的元素的集合
- 操作
- 簡單創建
- 通過其它列表創建
- 訪問
- 分片
- 追加 :在末尾追加(append),在指定位置追加 (insert)
- 刪除 :
- del
- remove
- pop
- 清除: clear
- 反轉
- 擴展
- 拷貝
- 內嵌函數操作列表
- len:返回列表長度
- del :刪除一個列表
- max/min:返回列表裏面最大/小值
列表list的功能演示
- 簡單創建
#創建空列表
l1 = []
#創建帶值的列表
l2 = [100]
#創建多個值的列表
l3 = [1,2,3,45,56,4,43]
#使用list()創建
l4 = list()
#使用for循環創建新列表
- 通過其它列表創建
#for 創建
a = ['a', 'b', 'c']
#用list a 創建一個list b
#對於所有a中的元素,逐個放入新列表b中,生成新的id
b = [i for i in a] #這裏等同於b = a
print(id(a))
print(id(b))
print(b)
#對於所有a中的元素,逐個乘以10放入新列表b中
a = [1, 2, 3]
b = [i*10 for i in a]
print(b)
#還可以過濾原來list中的內容並放入新列表
#比如原有列表a, 需要把所有a中偶數生成新列表b
a = [x for x in range(1,35)] #生成從1 到34 的列表
print(a)
#帶條件表達式的列表生成式
b = [m for m in a if m % 2 == 0]
print(b)
#列表生成可以嵌套
#以倆個列表a,b爲例
a = [i for i in range(1,4)] #生成 list a
print(a)
b = [i for i in range(100,400) if i% 100 ==0]
print(b)
#列表嵌套,等於兩個for循環的嵌套
c = [m+n for m in a for n in b]
print(c)
#列表嵌套,等於兩個for循環的嵌套,加上過濾條件
c = [m+n for m in a for n in b if m+n <= 300]
print(c)
- 訪問
- 使用下標操作(索引)
- 列表的位置是從0開始
- 列表訪問不能越界,會報錯
#下標訪問列表
l = [2,3,5,12,51,6]
#打印列表第一個值,注意索引是0
print(l[0])
print("*" * 20)
#使用for循環打印所有的值
for i in l:
print(i)
- 分片
- 在整個隊列裏面截取任意一小段
- 用冒號分隔: l[a🅱️c], 其中c是步長,可以省略,省略默認爲1
- 分片操作默認生成一個新的list,可以用內置函數id來看是否同一個list
- 分片下標可以超出範圍,超出後不考慮多餘下標內容, 注意跟範圍下標超出時報錯的區別
#分片操作
l = [2,3,5,12,51,6,11,12,13]
#截取第一個到第三個
print(l[0:3])
#下標可以不寫,如果不寫,左邊默認爲0, 右邊下標值爲最大數加1,既表示到最後一個數據
print(l[:4])
print(l[2:])
#增加步長
print(l[1:6:1])
#跳一個
print(l[1:6:2])
#下標可以超出範圍,超出後不考慮多餘下標內容
print(l[1:30])
#從後面開始
#從右往左,最後一個數是-1,這裏-4表明右邊數到左邊第四個,注意-2 值是12, 但是沒有包含
print(l[-4:-2])
#一般下標是從左邊到右邊,如果一定要從右邊往左,步長要是負數。顯示結果是倒裝的
print(l[-2:-4:-1])
- 追加 :在末尾追加(append),在指定位置追加 (insert)
#在末尾追加內容
a = [i for i in range(1,5)]
print(a)
a.append(100)
print(a)
#insert: 指定位置插入
#insert(index, data), 插入位置是index前面
a.insert(3,666) #在4的前面插入一個數666
print(a)
- 刪除 :
- del: 刪除整個list, list將無法訪問
- pop: 從一個列表中拿出/彈出一個元素,既把最後一個元素取出來。原列表中就沒有了。
- remove: 在列表中刪除指定的值的元素,不返回刪除的值,注意跟pop的區別
#在末尾追加內容
a = [i for i in range(1,5)]
print(a)
a.append(100)
print(a)
#insert: 指定位置插入
#insert(index, data), 插入位置是index前面
a.insert(3,666) #在4的前面插入一個數666
print(a)
#刪除
#del刪除 刪除整個list
#pop 從一個列表中拿出/彈出一個元素,既把最後一個元素取出來。原列表中就沒有了。
last_item = a.pop()
print(last_item)
print(a)
'''
remove:在列表中刪除指定的值的元素,不返回刪除的值,注意跟pop的區別
#如果被刪除的值沒有在list中,則報錯
#既,刪除的值的操作應該使用try...except語句,或者先行進行判斷
if x in list:
list.remove(x)
'''
if 666 in a:
item = a.remove(666) #刪除a中值爲666的元素,返回None
print(item)
print(a)
- 清除: clear
- 把列表數據都清除,但是list保存,注意和del的區別
#clear:清空,把列表數據都清除,但是list保存,注意和del的區別
a = [i for i in range(1,5)]
print(a)
a.clear()
print(a)
#如果不需要列表地址保持不變,可以用如下方式,相當於保持舊的list對象,但是指向新的列表
print(id(a))
a = list()
print(id(a))
a = []
print(id(a))
- 反轉 reverse
- 反轉列表內容,原地反轉, 指向原先id- 反轉列表內容,原地反轉, 指向原先id
#reverse:反轉列表內容,原地反轉
a = [i for i in range(1,5)]
print('原先列表的值:{0}'.format(a))
print('原先列表的id:{0}'.format(id(a)))
a.reverse()
print('反轉列表的值:{0}'.format(a))
print('反轉列表的id:{0}'.format(id(a)))
- 擴展 extend
- 擴展列表,倆個列表,把一個直接拼接到另外一個上
- 在原先的list的基礎上進行擴展,id不變
#使用extend進行擴展示例
a = [i for i in range(1,6)]
b = [i for i in range(5,10)]
print(id(a))
a.extend(b)
print(id(a))
print(a)
-拷貝 (淺拷貝) copy
#列表類型變量賦值
#修改了b, 把a的列表也改變了,這裏 b = a 是把a的地址傳給了b
a = [1,2,3,4]
print(a)
b = a
b[3] = 777
print(b)
print(a)
# copy傳了值,用copy重新生成了一個列表,所以對新的列表的修改不會影響原先的列表,僅限於第一層
print("*" * 20)
c = a.copy()
c[3] = 113
print(a)
print(c)
- 內嵌函數操作列表
#len: 求列表長度
a = [x for x in range(1,100)]
print(len(a))
#max/min: 求列表中的最大值/最小值
a = [1,3,6,4,8,5,9,8]
print(max(a))
print(min(a))