Python內置數據結構 - 列表list

列表具有的特性/功能

- 有順序的元素的集合
- 操作
	- 簡單創建
	- 通過其它列表創建
	- 訪問
	- 分片
	- 追加 :在末尾追加(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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章