06列表

1 序列(sequence)

1.1 基本概念

  • 序列是python中最基本的一種數據結構
  • 數據結構是計算機中數據存儲的方式
  • 序列用於保存一種有序數據,所有數據在序列中都由一個唯一的位置
  • 每個數據在序列中的唯一位置稱之爲“索引”,索引的分配是按照數據添加的順序來進行分配的

1.2 序列的分類

  • 可變序列,如列表(list)、字典(dict)
  • 不可變序列,如字符串(str)、元組(tuple)

2 列表

  • 列表list是python中的一個對象
  • 列表是用來存儲對象的對象
  • 列表中可以保存多個有序的數據

2.1 列表的使用

  • 列表的創建:通過[]進行空列創建
# 通過[]創建列表
# lst=[1,2,3]
# 列表可以保存任意的對象
lst=[1,'name',[1,2,1],True]
print(lst,type(lst))
# 索引是從0開始
print(lst[1])
# len()獲取列表長度(索引最大值)或字符串長度
print(len(lst))
# 列表參數爲負
print(lst[-1])

2.2 切片

  • 切片是指從現有列表中獲取一個子列表
  • 可通過切片來獲取指定的元素
  • 語法:列表[起始:結束:步長]
  • 通過切片獲取數據時會包括起點元素,但不包括重點數據
  • 省略起點和終點位置
    。省略起點位置:從第一個元素開始截取
    。省略終點位置:截取一直到終點的所有數據
    。起點和終點都省略:截取所有從第一個到最後一個數據元素
  • 步長表示每次獲取元素的間隔,不寫默認爲1
  • 步長不可爲0,負數表示逆向
# 切片是從現有列表中獲取一個子列表,不影響原列表值
# 通過切片來獲取指定元素
# 語法:列表[開始:結束:步長]
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊長']
print(hero[2:4]) #['蜘蛛俠', '黑寡婦']
print(hero[:3]) #['鋼鐵俠', '綠巨人', '蜘蛛俠']
print(hero[1:]) #['綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
print(hero[:]) #['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
print(hero[::1]) #['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
print(hero[::2]) #['鋼鐵俠', '蜘蛛俠', '蟻人']
print(hero[::-2]) #['美國隊長', '黑寡婦', '綠巨人']
print(hero[::-1]) # ['美國隊長', '蟻人', '黑寡婦', '蜘蛛俠', '綠巨人', '鋼鐵俠']

3 通用操作

  • + 和 *
    。+ 可以將兩個列表拼接成一個列表
    。* 可以將列表重複指定的次數 (注意2個列表不能夠做乘法,列表可以和整數做乘法運算)
# +、*
lst=[1,2,3]+[4,5,6]
print(lst)  # [1, 2, 3, 4, 5, 6]
 # lst=[1,2,3]*[4,5,6] #can't multiply sequence by non-int of type 'list'
 # print(lst)
# 列表與整數相乘使列表拼接本身內容整數次
lst=[1,2,3]*2
print(lst) # [1, 2, 3, 1, 2, 3]
  • innot in
    。in用來檢查指定元素是否列表當中
    。not in 用來檢查指定元素是否在列表當中
# in 和 not in
# in 判斷指定元素是否存在指定列表中
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊長']
print('綠巨人'in lst) #False
print('綠巨人'in hero) #True
print('綠巨人'not in lst) #True
  • len() 獲取列表中元素的個數
  • max() 獲取列表中最
  • min() 獲取列表中最
# max()、min()獲取最大、最小值
print(max(lst),min(lst)) # 3 1
# print(max(hero),min(hero)) #按字符ascii碼進行比較,字符串比較大小
# print(ord('鋼'),ord('綠'),ord('蜘'),ord('黑'),ord('蟻'),ord('美'))
  • list.index(x, start, end)
    。第一個參數 獲取指定元素在列表中的位置
    。第二個參數 表示查找的起始位置
    。第三個參數 表示查找的結束位置
lst=[1,2,3,1,2]
# print(hero.index('蜘蛛俠')) #2
print(lst.index(1),lst.index(2)) # 0 1 列表中有重複值時取第一個值
# 想要查找重複值中其他值時,可以越過第一個或者指定範圍
# 跳過
print(lst.index(1,1),lst.index(2,2))# 3 4
# 指定範圍 index(*,*,*)第一個參數爲查找元素,第二個參數爲起點索引,第三個參數爲終點索引
print(lst.index(1,1,4)) # 3
# lst.count()統計出現次數
print(lst.count(1)) # 2
  • list.count(x) 統計指定元素在列表中出現的個數

4 修改列表

  • 通過切片來修改列表(就是給切片的內容重新賦值,但是賦值的內容必須是一個序列)
  • 當設置了步長時,序列中元素的個數必須和切片中元素的個數保持一致
  • 通過切片來刪除元素
    del list [起始 :結束]
    list[1:2] = []
hero = ['鋼鐵俠','綠巨人','蜘蛛俠','黑寡婦','蟻人','美國隊長']
# # 通過索引
# print(hero) #修改前
# hero[0]='雷神'
# print(hero) #修改後 ['雷神', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']

# # 通過del刪除元素
# del hero[2]
# print(hero) #['雷神', '綠巨人', '黑寡婦', '蟻人', '美國隊長']

# 通過切片更改,傳遞的必須也是一個序列
# hero[0:3]='abcd' # ['a', 'b', 'c', 'd', '黑寡婦', '蟻人', '美國隊長']
# hero[0:3]= abcd  # NameError: name 'abcd' is not defined
#hero[0:3]= '123' # ['1', '2', '3', '黑寡婦', '蟻人', '美國隊長']
#hero[0:3]= 123  # TypeError: can only assign an iterable
print('修改前:',hero)
# #三個元素替換兩個元素,ok
# hero[0:2]=['黑豹','雷神','滅霸']  # ['黑豹', '雷神', '滅霸', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
# 向索引爲0位置插入元素
# hero[0:0]=['雷神'] #['雷神', '鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
# 當設置了步長時,序列元素個數與切片中元素個數必須一致
# hero[::2]=['雷神'] # ValueError: attempt to assign sequence of size 1 to extended slice of size 3
# hero[::2]=['黑豹','雷神','滅霸']
# 通過切片刪除元素
# hero[0:1]=[] # ['綠巨人', '蜘蛛俠', '黑寡婦', '蟻人', '美國隊長']
# del hero[0:2]
print('修改後:',hero)
  • 所謂修改只針對可變序列,字符串和元組不可變的當然不能直接修改,但可以通過轉化爲可修改序列操作
# 只有可變序列纔可以修改
s='python'
# s[1]='i' # TypeError: 'str' object does not support item assignment
s=list(s)
s[1]='i' #['p', 'i', 't', 'h', 'o', 'n']
print(s)

5 列表的方法

  • append() 向列表的最後添加一個元素
  • insert(arg1,arg2) 向列表指定位置插入一個元素:參數1-要插入的位置,參數2-要插入的元素
  • extend( iterable ) 使用一個新的序列來擴展當前序列(它會將該序列的中元素添加到列表中) 參數需要傳遞一個序列
  • pop() 根據索引刪除並返回指定元素
  • remove() 刪除指定元素 (如果相同值的元素有多個,只會刪除第一個)
  • reverse() 翻轉列表
  • sort(key=None,reverse=False) 用來對列表中的元素進行排序 reverseTrue反序,False 正序
hero = ['鋼鐵俠','綠巨人','蜘蛛俠'] # ,'黑寡婦','蟻人','美國隊長'
# print('修改前:',hero)

# hero[3]='b' #IndexError: list assignment index out of range
# .append()向列表最後添加一個元素
# hero.append('黑寡婦')

# insert是向列表指定位置添加一個元素,參數1-位置,參數2-元素
# hero.insert(2,'黑寡婦') # ['鋼鐵俠', '綠巨人', '黑寡婦', '蜘蛛俠']
# hero.insert(5,'蟻人') #修改後: ['鋼鐵俠', '綠巨人', '蜘蛛俠', '蟻人']當插入位置超出最大值時永遠在末尾插入一個值,而不是報錯

# extend 使用新的序列來擴展當前序列
# hero.extend(123) # TypeError: 'int' object is not iterable
# hero.extend(['黑寡婦','蟻人']) # 修改後:['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人']
# hero+=['黑寡婦','蟻人'] # 修改後: ['鋼鐵俠', '綠巨人', '蜘蛛俠', '黑寡婦', '蟻人']

# clear清空集合
# hero.clear() # 修改後: []

# pop根據索引刪除並返回指定的元素
# hero.pop(2)
# pop 中沒指定索引值時刪除最後一個元素
# print('修改後:',hero.pop(2)) #修改後: 蜘蛛俠
# print('修改後:',hero.pop()) #修改後: 蜘蛛俠

# remove 根據指定的元素刪除值,如果有重複值刪除第一個
# hero.insert(3,'綠巨人')
# hero.remove('綠巨人')
# print('修改後:',hero.remove('綠巨人')) # 修改後: None  無返回值

# reverse 反轉列表
# hero.reverse()
# print('修改後:',hero) # 修改後: ['蜘蛛俠', '綠巨人', '鋼鐵俠']

# # sort默認升序排列
# lst=list('asddfipdofi')
# print('修改前:',lst)
# lst.sort()
# print('修改後:',lst)  # 修改後: ['a', 'd', 'd', 'd', 'f', 'f', 'i', 'i', 'o', 'p', 's']
# lst.sort(reverse=True)
# print('修改後:',lst)  # 修改後: ['s', 'p', 'o', 'i', 'i', 'f', 'f', 'd', 'd', 'd', 'a']

6 遍歷列表

6.1 for循環

  • 通過for循環來遍歷列表
  • 語法:
    for 變量 in 序列:
         代碼塊
  • 注意: for循環的代碼塊會執行多次,序列中有幾個元素就會執行幾次。每執行一次就會將序列中的一個元素賦值給變量,所以我們可以通過變量來獲取列表中的元素
'''
for 語句中的代碼塊循環執行n次,n爲列表中元素的個數,每執行一次從列表中取出一個值賦值給變量
'''
for i in hero:
    print(i,' ',end='')
# 執行結果是 鋼鐵俠  綠巨人  蜘蛛俠  黑寡婦

6.2 range(start,stop[, step])

  • 參數說明
    。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)
# range
'''
開始 默認是0,可以省略 
結束 不包含結束元素
步長 默認爲1,可以省略
'''
# 舉例獲取列表中的奇數
lst=[1,2,3,4,5,6,7,8,9]
# print(list(range(0,20,2))) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

'''這裏的i是索引值啦'''
# for i in range(0,9,2):
#     print(lst[i],' ',end='') # 1  3  5  7  9

for i in range(len(lst)):
    # print(i,end='') # 此時i爲索引值  012345678
    print(lst[i],end='') # 此時爲列表元素值  123456789
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章