Python基礎(chǔ)之列表

1. 序列(sequence)

1.1 基本概念

  • 序列是Python中最基本的一種數(shù)據(jù)結(jié)構(gòu)。序列用于保存一組有序的數(shù)據(jù),所有的數(shù)據(jù)在序列當(dāng)中都有一個唯一的位置(索引)并且序列中的數(shù)據(jù)會按照添加的順序來分配索引
  • 數(shù)據(jù)結(jié)構(gòu)指計(jì)算機(jī)中數(shù)據(jù)存儲的方式

1.2 序列的分類

  • 可變序列(序列中的元素可以改變):例如 列表(list)字典(dict)
  • 不可變序列(序列中的元素不能改變):例如 字符串(str)元組(tuple)

2. 列表(list)

  • 列表是Python中的一個對象
  • 列表的作用
    • 列表中可以保存多個有序的數(shù)據(jù)
    • 列表是用來存儲對象的對象

2.1 列表的使用

  • 列表的創(chuàng)建:通過[]來創(chuàng)建一個空列表
# 創(chuàng)建列表 通過[]來創(chuàng)建列表
 lst = []  # 創(chuàng)建了一個空的列表
# 一個列表當(dāng)中可以存儲多個元素,也可以在創(chuàng)建列表的時候,指定列表當(dāng)中的元素
# 當(dāng)列表當(dāng)中添加多個元素要用 , 隔開
# 列表可以存儲任意對象
# lst = [1,'python',None,True,[1,2,3]]

lst = [1,2,3,4,5]
# 索引
# 我們可以通過索引(index)來獲取列表當(dāng)中的元素
# 索引就是元素在列表當(dāng)中的位置 索引從0開始,列表的第一個位置是0 第二個是1 以此類推
print(lst[1])   #2
print(lst[2])   #3
print(lst[5]) # IndexError: list index out of range 超出最大索引范圍
# 獲取列表的長度 是列表的最大索引值+1
print(len(lst)) #5
# 索引可以是負(fù)數(shù)
# 如果索引是負(fù)數(shù) 則從后向前獲取元素 -1表示倒數(shù)第一個 -2表示倒數(shù)第二個 以此類推
print(lst[-1])  #5
print(lst[-2])  #4

2.2 切片

  • 切片是指從現(xiàn)有列表中獲得一個子列表
  • 通過切片來獲取指定的元素
  • 語法: 列表[起始 : 結(jié)束 : 步長]
  • 通過切片獲取元素時,會包括起始位置的元素,不會包括結(jié)束位置的元素
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊(duì)長']
# 做切片操作時,總會返回一個新的列表,不會影響原來的列表
print(hero[0:1])   #['鋼鐵俠']
print(hero[2:4])   #['蜘蛛俠', '黑寡婦']
print(hero)        #['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊(duì)長']
  • 起始位置和結(jié)束位置的索引可以不寫
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊(duì)長']
# 如果我省略結(jié)束位置,則會從當(dāng)前的開始位置一直截取到最后
print(hero[1:])    #['綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊(duì)長']

# 如果省略開始位置,則會從第一個元素截取到結(jié)束位置的元素,但是不包括結(jié)束的元素
print(hero[:3])    #['鋼鐵俠', '綠巨人', '蜘蛛俠']

# 如果開始位置和結(jié)束位置都省略,則會從第一個元素截取到最后一個元素
print(hero[:])     #['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊(duì)長']
  • 步長表示每次獲取元素的間隔,默認(rèn)是1(可以省略不寫)
  • 步長不能是0,但可以是是負(fù)數(shù)
  • 如果步長是負(fù)數(shù) 則會從列表的后面像前面獲取元素
 print(hero[0:5:1])#['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人']
 print(hero[::0])  # ValueError: slice step cannot be zero 步長不能是0
 print(hero[::-1]) #['美國隊(duì)長', '蟻人', '黑寡婦', '蜘蛛俠', '綠巨人', '鋼鐵俠']

3. 通用操作

3.1 + 和 *

  • + 表示可以將兩個列表拼接成一個列表
  • * 表示可以將列表中的元素指定重復(fù)的次數(shù) (注意2個列表不能夠做乘法,要和整數(shù)做乘法運(yùn)算)
lst = [1,2,3] + [4,5,6] # [1, 2, 3, 4, 5, 6]
lst = [4,5,6] * [1,2,3] # TypeError: can't multiply sequence by non-int of type 'list'
lst = [1,2,3] * 2       # [1,2,3,1,2,3]
print(lst)

3.2 in 和 not in

  • in用來檢查指定元素是否在列表當(dāng)中
  • not in 用來檢查指定元素是否不在列表當(dāng)中
# in 和 not in
# in 表示用來檢查指定元素是否在列表當(dāng)中,如果在返回True,如果不在返回False
# not in  表示用來檢查指定元素是否不在列表當(dāng)中,如果不在返回True,如果在返回False
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊(duì)長']
print('蜘蛛俠'in hero)         #True
print('鋼鐵俠'not in hero)     #False

3.3 更多

  • len() 獲取列表中元素多個數(shù)(長度)
    • print(len( ))
  • max() 獲取列表中最大值
  • min() 獲取列表中最小值
  • list.index(x[, start[, end]])
    • 第一個參數(shù) 獲取指定元素在列表中的位置
    • 第二個參數(shù) 表示查找的起始位置
    • 第三個參數(shù) 表示查找的結(jié)束位置
  • list.count(x) 統(tǒng)計(jì)指定元素在列表中出現(xiàn)的個數(shù)
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊(duì)長','蜘蛛俠','蜘蛛俠']
# 方法和函數(shù)的區(qū)別 方法必須通過 對象.方法() xxx.yyy() zzz()
s.index(x[, i[, j]]) # 獲取指定元素在列表當(dāng)中的位置
# 第二個參數(shù) 表示查找的起始位置 # 第三個參數(shù) 表示查找的結(jié)束位置
print(hero.index('蜘蛛俠',3,7))  # 6

s.count(x)   # 統(tǒng)計(jì)指定元素在列表中出現(xiàn)的次數(shù)
print(hero.count('蝙蝠俠'))   # 0

4. 修改列表

  • 通過切片來修改(起始就是給切片的內(nèi)容重新賦值,但是賦值的內(nèi)容必須是一個序列)
  • 當(dāng)設(shè)置了步長時,序列中元素的個數(shù)必須和切片中元素的個數(shù)保持一致
  • 通過切片來刪除元素
    • del list[起始 : 結(jié)束]
    • list = []
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊(duì)長']

#通過索引來修改列表
hero[0] = '雷神'
print(hero)     #['雷神', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊(duì)長']

# 通過del 刪除元素
print('修改前',hero)
del hero[2]
print('修改后'hero)     
#修改前 ['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊(duì)長']
#修改后 ['鋼鐵俠', '綠巨人', '黑寡婦', '蟻人', '美國隊(duì)長']

# 通過切片來修改列表
hero[0:3] = 'abcd' #修改后 ['a', 'b', 'c', 'd', '黑寡婦', '蟻人', '美國隊(duì)長']
# 在給切片進(jìn)行復(fù)制 必須傳遞一個序列
hero[0:2] = 123 # TypeError: can only assign an iterable
hero[0:2] = ['黑豹','雷神','滅霸']#修改后 ['黑豹', '雷神', '滅霸', 'c', 'd', '黑寡婦', '蟻人', '美國隊(duì)長']
# 向索引為0的位置插入元素
hero[0:0] = ['雷神']  #修改后 ['雷神', '黑豹', '雷神', '滅霸', 'c', 'd', '黑寡婦', '蟻人', '美國隊(duì)長']
print('修改后',hero)

# 當(dāng)設(shè)置了步長時,序列中元素的個數(shù)必須和切片中元素的個數(shù)一致
print(hero[::2])    #['鋼鐵俠', '蜘蛛俠', '蟻人']
hero[::2] = ['黑豹','雷神','滅霸']  #修改后 ['黑豹', '綠巨人', '雷神', '黑寡婦', '滅霸', '美國隊(duì)長']
hero[::2] = ['黑吧'] * 3        #修改后 ['黑吧', '綠巨人', '黑吧', '黑寡婦', '黑吧', '美國隊(duì)長']
print('修改后',hero)

#  可以通過切片來刪除元素
print('修改前',hero)
hero[1:3] = []
print('修改后',hero)         #修改后 ['黑吧', '黑寡婦', '黑吧', '美國隊(duì)長']
s = 'python' # 不可變序列無法通過索引修改
# s[1] = 'j'
s = list(s)
s[1] = 'j'
print(s)
# ['p', 'j', 't', 'h', 'o', 'n']

5. 列表的方法

  • append() 像列表的最后添加一個元素
  • insert(arg1,arg2) 像列表指定位置插入一個元素 參數(shù)1:要插入的位置 參數(shù)2:要插入的元素
  • extend(iterable) 使用一個新的序列來擴(kuò)展當(dāng)前序列(它會將該序列的中元素添加到列表中) 參數(shù)需要傳遞一個序列
  • pop() 根據(jù)索引刪除并返回指定元素
  • remove() 刪除指定元素 (如果相同值的元素有多個,只會刪除第一個)
  • reverse() 翻轉(zhuǎn)列表
  • sort(key=None,reverse=False) 用來對列表中的元素進(jìn)行排序 reverse:True反序;False 正序

6. 遍歷列表

6.1 for循環(huán)

  • 通過for循環(huán)來遍歷列表
語法
for 變量 in 序列(遍歷的規(guī)則):
    代碼塊
  • 注意: for循環(huán)的代碼塊會執(zhí)行多次,序列中有幾個元素就會執(zhí)行幾次。每執(zhí)行一次就會將序列中的一個元素賦值給變量,所以我們可以通過變量來獲取列表中的元素

6.2 range(start, stop[, step])

參數(shù)說明

  • start: 計(jì)數(shù)從 start 開始。默認(rèn)是從 0 開始。例如range(5)等價于range(0, 5);
  • stop: 計(jì)數(shù)到 stop 結(jié)束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,默認(rèn)為1。例如:range(0, 5) 等價于 range(0, 5, 1)

小練習(xí)

現(xiàn)在有 a = [1,2,3,4,5,6] 不通過函數(shù)的形式實(shí)現(xiàn)列表的反轉(zhuǎn)([6,5,4,3,2,1]) 并寫出推導(dǎo)過程

# 解決方案
a[::-1]
# 考點(diǎn) 列表當(dāng)中的切片

# 起始位置和結(jié)束位置的索引可以不寫
# 如果我省略結(jié)束位置,則會從當(dāng)前的開始位置一直截取到最后
a[1:]
[2, 3, 4, 5, 6]
#如果省略開始位置,則會從第一個元素截取到結(jié)束位置的元素,但是不包括結(jié)束的元素
a[:3]
[1, 2, 3]
# 如果開始位置和結(jié)束位置都省略,則會從第一個元素截取到最后一個元素

# 語法  列表[起始:結(jié)束:步長]
a[0:5]
[1, 2, 3, 4, 5]
a[0:5:1]
[1, 2, 3, 4, 5]
#如果步長為負(fù)從右往左取值
a[4:1:-1]
[5, 4, 3]

a[::-1]
[6, 5, 4, 3, 2, 1]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容