06 列表

06 列表

1. 序列(sequence)

1.1 基本概念

-序列是Python中最基本的?種數據結構。序列?于保存?組有序的數據,所有的數據在序列當中都有?個唯?的位置(索引)并且序列中的數據會按照添加的順序來分配索引

  • 數據結構指計算機中數據存儲的?式

1.2 序列的分類

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

2. 列表(list)

  • 列表是Python中的?個對象
  • 列表里面存儲的數據我們稱之為元素

lst = [1,2,3,4,5]
print(lst,type(lst))

  • 列表的作?
    列表中可以保存多個有序的數據
    列表是?來存儲對象的對象
    列表可以保存任意的對象

lst = ['python',1,True,None,[2,3,4]]

2.1 列表的使?

  • 列表的創(chuàng)建:通過[]來創(chuàng)建?個空列表

lst = []

  • 在列表當中可以通過索引(index)或者下標來獲取列表中的元素
  • 索引是從0開始 列表的第一個位置的索引就是0 以此類推
  • IndexError: list index out of range 超出最大索引值就會報錯

lst = [10,20,30,40,50]
print(lst[-1])
print(lst[2])

2.2 切?

  • 切?是指從現(xiàn)有列表中獲得?個?列表
  • 通過切?來獲取指定的元素
  • 語法: 列表[起始 : 結束 : 步?]
  • 通過切?獲取元素時,會包括起始位置的元素,不會包括結束位置的元素
  • 做切片操作時,總會返回一個新的列表,不會影響原來的列表

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
print(hero)
h = hero[0:2]
print(h) # ['鋼鐵俠', '葫蘆娃']
print(hero) # ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']

  • 起始位置和結束位置的索引可以不寫
    如果省略結束位置, 則會從當前的開始位置?直截取到最后

print(hero[2:])

如果省略開始位置, 則會從第?個元素截取到結束的元素,但是不包括結束的元素

print(hero[:3])

如果開始位置和結束位置都省略, 則會從第?個元素開始截取到最后?個元素
print(hero[:])

  • 步?表示每次獲取元素的間隔,默認是1(可以省略不寫)
  • 步?不能是0,但可以是是負數

print(hero[0:5:2])
print(hero[::0]) # ValueError: slice step cannot be zero

練習:現(xiàn)在有 a = [1,2,3,4,5,6],不通過函數的形式實現(xiàn)列表的反轉([6,5,4,3,2,1])

a = [1,2,3,4,5,6]
print(a[::-1])
結果:[6, 5, 4, 3, 2, 1]

3. 通?操作

  • '+ 和 *
    '+ 可以將兩個列表拼接成?個列表

lst = [1,2,3] + [4,5,6]

'* 可以將列表重復指定的次數
(注意2個列表不能夠做乘法,要和整數做乘法運算)

lst = [1,2,3] * 2
lst = [1,2,3] * [1,2,3] # 報錯

  • in 和 not in
    in?來檢查指定元素是否在列表當中
    not in ?來檢查指定元素是否不在列表當中

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
print('綠巨人'not in hero)

  • len() 函數獲取列表中元素的個數 或可以獲取列表的長度

lst = [10,20,30,40,50]
print(len(lst))

  • max() 獲取列表中最?值
  • min() 獲取列表中最?值

lst = [100,1,34,5]
print(min(lst))
print(max(lst))
結果:1 100

  • list.index(x[, start[, end]])
    第?個參數 獲取指定元素在列表中的位置
    第?個參數 表示查找的起始位置
    第三個參數 表示查找的結束位置

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長','蜘蛛俠','蜘蛛俠']
print(hero.index('蜘蛛俠')) # 結果:2
print(hero.index('蜘蛛俠',3,7)) # 結果:6

  • list.count(x) 統(tǒng)計指定元素在列表中出現(xiàn)的次數

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長','蜘蛛俠','蜘蛛俠']
print(hero.count('蜘蛛俠')) # 結果:3
print(hero.count('蝙蝠俠')) # 結果:0

s = 'Jerry'
print(s.count('r'))
結果:報錯 SyntaxError: multiple statements found while compiling a single statement
計算的是元素的個數,不能計算一個字符串中某個字符的個數

4. 修改列表

  • 通過索引來修改

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
hero[0] = '雷神'
print(hero)
結果:['雷神', '葫蘆娃', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']

  • 通過del來修改 刪除元素

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
del hero[2]
print(hero)
結果:['鋼鐵俠', '葫蘆娃', '黑寡婦', '蟻人', '美國隊長']

  • 通過切?來修改
    (起始就是給切?的內容重新賦值,但是賦值的內容必須是?個序列)

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
hero[0:3] = 'abcd'
print(hero)
結果:['a', 'b', 'c', 'd', '黑寡婦', '蟻人', '美國隊長']
hero[0:2] = 132
結果:報錯,必須是可迭代的(是個序列),整數不行
TypeError: can only assign an iterable list()

  • 如果替換的元素大于原有的元素,多余的元素會往后順延

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
hero[0:2] = ['黑豹','雷神','滅霸']
hero[0:0] = ['雷神'] # 向索引為0的位置插入元素
hero[1:1] = ['雷神'] # 向索引為1的位置插入元素
結果:['黑豹', '雷神', '滅霸', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
['雷神', '鋼鐵俠', '葫蘆娃', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
['鋼鐵俠', '雷神', '葫蘆娃', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']

  • 當設置了步?時,序列中元素的個數必須和切?中元素的個數保持?致

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
hero[::2]
hero[::2] = ['雷神']
hero[::2] = ['黑豹','雷神','滅霸']
結果:['鋼鐵俠', '蜘蛛俠', '蟻人']
報錯 ValueError: attempt to assign sequence of size 1 to extended slice of size 3
['黑豹', '葫蘆娃', '雷神', '黑寡婦', '滅霸', '美國隊長']

  • 通過切?來刪除元素
    del list[起始 : 結束]
    ist = []

hero = ['鋼鐵俠','葫蘆娃','蜘蛛俠','黑寡婦','蟻人','美國隊長']
hero[1:3] = []
結果:['鋼鐵俠', '黑寡婦', '蟻人', '美國隊長']

s = 'python'
s = list(s) #不轉換成列表,無法更改元素
s[1] = 'j'
print(s)
結果:['p', 'j', 't', 'h', 'o', 'n']

5. 列表的?法

  • append() 像列表的最后添加?個元素
    局限性:只能添加一個元素

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
hero.append('黑寡婦')
結果:['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦']

  • insert(arg1,arg2) 像列表指定位置插??個元素
    參數1:要插?的位置
    參數 2:要插?的元素

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
hero.insert(2,'黑寡婦')
結果:['鋼鐵俠', '綠巨人', '黑寡婦', '蜘蛛俠']
hero[3:3] = 'a'
結果:['鋼鐵俠', '綠巨人', '蜘蛛俠', 'a']

  • extend(iterable) 使??個新的序列來擴展當前序列(它會將該序列中的元素添加到列表中) 參數需要傳遞?個序列

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
hero.extend(['黑寡婦','超人']) # 相當于 hero += ['黑寡婦','超人']
hero.extend('ab')
結果:['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '超人']
['鋼鐵俠', '綠巨人', '蜘蛛俠', 'a', 'b']
lst = [1,2,3] + 'ab' # 列表直接相加,會報錯

  • clear() 清空序列

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
hero.clear()
結果:[]

  • pop() 根據索引刪除并返回指定元素

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
result = hero.pop(2)
print(result)
print(hero)
結果:蜘蛛俠 #刪除的那個元素
['鋼鐵俠', '綠巨人']

  • remove() 刪除指定元素 (如果相同值的元素有多個,只會刪除第?個)

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
result = hero.remove('綠巨人')
print(result)
結果:None # 不會返回刪除的這個元素

  • reverse() 翻轉列表

hero = ['鋼鐵俠','綠巨人','蜘蛛俠']
hero.reverse()
結果:['蜘蛛俠', '綠巨人', '鋼鐵俠']

  • sort(key=None,reverse=False) ?來對列表中的元素進?排序,默認是升序
    reverse:True降序;False升序

lst = list('asndkaldwnwki')
lst.sort()
lst.sort(reverse=True)
結果:['a', 'a', 'd', 'd', 'i', 'k', 'k', 'l', 'n', 'n', 's', 'w', 'w']
['w', 'w', 's', 'n', 'n', 'l', 'k', 'k', 'i', 'd', 'd', 'a', 'a']

6. 遍歷列表

6.1 for循環(huán)

  • 通過for循環(huán)來遍歷列表
    語法 :

for 變量 in 序列(遍歷的規(guī)則):
....代碼塊

  • 注意: for循環(huán)的代碼塊會執(zhí)?多次,序列中有?個元素就會執(zhí)??次。每執(zhí)??次就會將序列中的?個元素賦值給變量,所以我們可以通過變量來獲取列表中的元素

hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蝙蝠俠']
i = 0
while i < len(hero):
....print(hero[i])
....i += 1
結果:
鋼鐵俠
綠巨人
蜘蛛俠
黑寡婦
蝙蝠俠

hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蝙蝠俠']
for h in hero:
....print(h)
結果:
鋼鐵俠
綠巨人
蜘蛛俠
黑寡婦
蝙蝠俠

6.2 range(start, stop[, step])

range()函數,可以用來生成一個自然數的序列
參數說明

  • start: 計數從 start 開始。默認是從 0 開始。
    例如range(5)等價于 range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。
    例如:range(0, 5)是[0, 1, 2, 3, 4] 沒有5
  • step:步?,默認為1。
    例如:range(0, 5)等價于 range(0, 5, 1)

r = range(5)
print(r)
print(list(r))
結果:
range(0, 5)
[0, 1, 2, 3, 4]

for i in range(5):
....print('hello world')
結果:
hello world
hello world
hello world
hello world
hello world

作業(yè)1:給用戶9次機會 猜1 - 10 個數字隨機來猜數字。如果隨機的數字和用戶輸入的數字一致則表示正確,如果不一致則表示錯誤。最終結果要求用戶怎么也猜不對


作業(yè)2:有兩個列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]獲取內容相同的元素


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內容