在學習資料結構的時候,從老師和同學口中得知了python中用于實作線性表的list(串列),在查閱相關資料后,感覺這真是一個有趣又好用的資料結構,于是打算寫幾篇博客,加深對list原理和使用方法的理解,
先來講講list的定義和基本用法吧~
定義: 串列是由一系列按特定順序排列的元素組成,此時表中的元素不再像c,cpp, java一樣只能是同一型別,而是可以根據自己的需求,添加任意型別的元素(數,字串,串列,集合,元組,字典)且長度不限(具有和vector類似的記憶體模型),
基本操作:
1.定義串列
Python 中用方括號 [ ] 來表示串列,并且用逗號來分隔其中的元素,
student = [123.21, "xiaomin", '小紅']
#python中的單雙引號沒有區別
print(student)
#輸出[123.21, 'xiaomin', '小紅']
2.訪問元素
定義好串列之后很自然的就是去訪問類表中的元素啦~ python中的訪問方式和java類似,都是使用索引(一個數字,唯一的描述每一個元素在串列中的位置)進行訪問,
student = [123.21, "xiaomin", '小紅']
print(student[1])
#輸出xiaomin
2.1關于索引為負的討論:
在c和cpp中:
如果陣列的索引為負,在編譯時不會出現問題,當時在運行時則會出現例外并退出,(甚至還可能由于隨機訪問到了不該訪問的記憶體,被電腦的殺毒軟體視作病毒🤣)
在java中:
由于拋出例外機制的存在,當陣列索引為負時,將會出拋"ArrayIndexOutOfBoundsException"例外,
而在python中就大不一樣嘍!
在 Python 中,索引值可以為負數,負數的意思并不是說第一個位置之前還有并行時空的元素,而是表示從陣列后面的位置開始計算,比如 -1 就代表最后一個元素,-2 就代表倒數第二個元素,
student = [123.21, "xiaomin", "小紅"]
print(student[-1])
#輸出小紅
雖然索引可以為負數,但不意味著這個負數可以隨便選取,索引的絕對值需小于陣列的長度,
例如:
student = [123.21, "xiaomin", "小紅"]
print(student[-10])
#會輸出IndexError: list index out of range
3.添加元素
3.1 append()
添加單個元素到List的尾部, 只接受一個引數,引數可以是任何資料型別,被添加的元素在List中保持著原先結構型別,
例1.添加字串
student = [123.21, "xiaomin", "小紅"]
student.append('lalala')
print(student)
#輸出:[123.21, 'xiaomin', '小紅', 'lalala']
例2.添加元組
student = [123.21, "xiaomin", "小紅"]
temp = ('胖虎', '小夫', '大雄')
student.append(temp)
print(student)
#輸出:[123.21, 'xiaomin', '小紅', ('胖虎', '小夫', '大雄')]
例3.添加串列
student = [123.21, "xiaomin", "小紅"]
temp = ['胖虎', '小夫', '大雄']
student.append(temp)
print(student)
#輸出:[123.21, 'xiaomin', '小紅', ['胖虎', '小夫', '大雄']]
可以看出原有的資料型別并沒有發生改變,
3.2 extend()
extend() 和 append() 的區別在于:extend() 不會把串列或者元祖視為一個整體,而是把它們包含的元素逐個添加到串列中,
例1.添加元組
student = [123.21, "xiaomin", "小紅"]
temp = ('胖虎', '小夫', '大雄')
student.extend(temp)
print(student)
#輸出:[123.21, 'xiaomin', '小紅', '胖虎', '小夫', '大雄']
例2.添加串列
student = [123.21, "xiaomin", "小紅"]
temp = ['胖虎', '小夫', '大雄']
student.extend(temp)
print(student)
#輸出:[123.21, 'xiaomin', '小紅', '胖虎', '小夫', '大雄']
可以看到元組和串列的元素都被拆開,
3.3 insert()
insert語法格式: listname.insert(index , obj)
insert() 允許使用索引(也就是元素插入的位置),向list中插入元素,當索引值大于等于list的長度時,一律視為在list尾部插入一個元素,
而當插入串列或者元祖時,insert() 也會將它們視為一個整體,作為一個元素插入到串列中,這一點和 append() 是一樣的,
student = [123.21, "xiaomin", "小紅"]
temp = ('胖虎', '小夫', '大雄')
student.insert(314, temp)
print(student)
#輸出:[123.21, 'xiaomin', '小紅', ('胖虎', '小夫', '大雄')]
4.修改元素
4.1 修改單個元素
修改單個元素就很簡單啦,只需要使用索引賦值就可以了~
student = [123.21, "xiaomin", "小紅"]
student[0] = 3.14 #使用正索引
student[-1] = '胖虎' #使用負索引
print(student)
#輸出:[3.14, 'xiaomin', '胖虎']
4.2修改一組元素
python允許使用切片操作進行區間修改,
戳我看切片詳解哦~
例1.指定起始索引和終止索引(注意python的區間是左閉右開)
#修改一組元素的值
student = [123.21, "xiaomin", "小紅"]
student[0:2] = ['胖虎', '小夫'] #修改第零個和第一個元素的值,不包括第二個元素
print(student)
#輸出:['胖虎', '小夫', '小紅']
在測驗的時候發現修改部分的元素數量可以大于指定長度,在修改完指定元素后,將多余元素插入到指定位置的后面,
student = [123.21, "xiaomin", "小紅"]
student[0:2] = ['胖虎', '小夫', '大雄']
print(student)
#輸出:['胖虎', '小夫', '大雄', '小紅']
對空切片賦值,相當于插入一組新的元素:
student = [123.21, "xiaomin", "小紅"]
student[1:1] = ['胖虎', '小夫', '大雄']
print(student)
#輸出:[123.21, '胖虎', '小夫', '大雄', 'xiaomin', '小紅']
5.洗掉元素
5.1根據索引值洗掉元素
python的lis中共有兩種操作根據索引值洗掉元素,一是del,二是pop(),下面分別舉例講解:
(1) del 是 Python 中的關鍵字,專門用來執行洗掉操作,它不僅可以洗掉整個串列,還可以洗掉串列中的某些元素,
洗掉單個元素的格式為:del listname[index]
輸出連續元素的格式為:del listname[start : end]<區間左閉右開>
student = [123.21, "xiaomin", "小紅"]
del student[1] #注意這里是方括號,因為不是方法
print(student)
#輸出;[123.21, '小紅']
student = [123.21, "xiaomin", "小紅"]
del student[1:3]
print(student)
#輸出:[123.21]
(2) pop() 方法用來洗掉串列中指定索引處的元素
格式如下:listname.pop(index)
student = [123.21, "xiaomin", "小紅"]
student.pop(1)
print(student)
#輸出:[123.21, '小紅']
思考:python的list功能與STL中的list類似,但STL中的list同時具有pop( ) 和push( ) 兩個對應的方法,而在python的list中卻只有pop( ),這是為什么呢?
5.2根據元素值進行洗掉
remove() 方法用來洗掉和引數相同的第一個元素,如果需要洗掉的元素不存在,則會報錯,
student = [123.21, "xiaomin", "小紅"]
student.remove('小紅')
print(student)
#輸出:[123.21, 'xiaomin']
student = [123.21, "xiaomin"]
student.remove('小紅')
print(student)
#出現錯誤:list.remove(x): x not in list
5.3清空串列
clear( )方法用于清空串列
student = [123.21, "xiaomin", "小紅"]
student.clear()
print(student)
#輸出: []
好啦關于串列的基本操作就講到這里啦~下一篇咱們就來看看list的底層實作,揭開list為什么可以存盤各種元素的神秘面紗,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/198888.html
標籤:其他
下一篇:我的Python生涯
