串列 list
串列 ( list ) 又称为列表、清单或数组,串列和元组 ( tuple ) 类似,都可以将任何一种对象作为它们的元素,串列的应用非常广泛,在大部分的程序里都能看到串列的身影,这篇教学将会介绍建立、读取、添加、修改和删除的方法。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
建立串列
串列是将一连串的元素放在一个序列中,使其都有各自的编号,放入的元素可以是字串、数字、布尔、串列、字典...等基本元素,在 Python 里,有三种方法可以建立串列:“中括号 ( 方括号 )”、“list()”和“split() + 字串”。
中括号 ( 方括号 )
将要建立为串列的元素,放入中括号里,并使用逗号分隔,就会成为一个串列,通常会将串列赋值给一个变数,下方的例子 a 是字串的串列,b 是数字串列,c 则是文字、数字和串列所组成的串列。
a = ['apple','banana','orange'] b = [1,2,3,4,5] c = ['apple',1,2,3,['dog','cat']] print(type(a)) # <class 'list'> print(type(b)) # <class 'list'> print(type(c)) # <class 'list'>list()
list() 函数可以建立一个“空的”串列,也能将“可迭代”( 有顺序 ) 的数据转换成串列,例如 tuple、字串、集合或字典,下方的例子 b 会将 tuple 转换成串列,c 是空的串列,d 则是将 apple 字串变成五个独立字母的串列。
a = ('apple','banana','orange') b = list(a) c = list() d = list('apple') print(b) # ['apple', 'banana', 'orange'] print(c) # [] print(d) # ['a', 'p', 'p', 'l', 'e']split() + 字串
split() 函数可以将一个字串,根据指定的分隔符号,拆分成串列,下图的例子,会根据“.”符号,将字串拆成串列,由于有多个“.”在一起,拆分时会出现“空”的字串元素。
a = 'apple...banana...orange' b = a.split('.') print(b) # ['apple', '', '', 'banana', '', '', 'orange']
合并串列
合并串列有两种方法:“使用 + 号”和“extend()”。
使用 + 号
使用“+”号可以让两个串列,像字串一样的相加,在 + 号右方的串列,会加在左方串列的后方。
a = ['a1','a2','a3'] b = ['b1','b2','b3'] c = a + b print(c) # ['a1', 'a2', 'a3', 'b1', 'b2', 'b3']extend()
extend() 函数能让一个串列的后方,合并另外一个串列的内容。
a = ['a1','a2','a3'] b = ['b1','b2','b3'] a.extend(b) print(a) # ['a1', 'a2', 'a3', 'b1', 'b2', 'b3']注意,extend() 函数会改变串列,但不会回传串列的值,所以如果写成下面的程序,会得到 none 的结果。
a = ['a1','a2','a3'] b = ['b1','b2','b3'] c = a.extend(b) print(c) # none
读取串列项目
要使用串列,就必须要读取串列的内容,Python 提供了两种读取串列项目的方法“offset”和“slice()”。
offset
序列中每个元素都有各自的序列编号 ( offset ),只要透过“
[offset]”,就能读取对应的内容,串列中第一个项目的 offset 为 0,第二个 offset 为 1,依此类推,下面的例子,会依序读取并印出串列中的元素。a = ['apple','banana','orange'] print(a[0]) # apple print(a[1]) # banana print(a[2]) # orangeoffset 默认从左侧开始,第一个项目为 0,如果从右侧开始,第一个项目为 -1,第二个项目为 -2,依此类推。
a = ['apple','banana','orange'] print(a[-1]) # orange print(a[-2]) # banana print(a[-3]) # apple如果串列中有串列,就构成了“多维串列”,读取元素时如果有第二层,就多一个中括号加上 offset,就能读取第二层的元素。
a = ['apple','banana','orange',['dog','cat']] print(a[3][0]) # dog print(a[3][1]) # catslice()
slice() 函数可以取出串列中“某个范围”的元素,使用方式在中括号里加上冒号“:”,在冒号的前后放入指定的 offset,就能取出指定范围的数据 ( 第一个 offset : 第二个 offset - 1 ),如果不指定数值,冒号前方默认为 0,冒号后方默认为 -1。
范围也可以使用“负数”,表示从右侧数来,但要注意第一个值的顺序 ( 不论正负 ) 都必须要在第二个值的前面,不然就读取不到项目 ( 会回传空的结果 )。
a = [0,1,2,3,4,5,6,7,8,9] b = a[:3] c = a[3:] d = a[1:3] e = a[-5:-2] print(b) # [0, 1, 2] 取得 0~(3-1) 項 print(c) # [3, 4, 5, 6, 7, 8, 9] 取得 3~最後一項 print(d) # [1, 2] 取得 1~(3-1) 項 print(e) # [5, 6, 7] 取得倒數第 5 項~(倒數第二項-1)如果使用两个冒号“::”,表示要“间隔几个项目”取值,例如“::2”就是间隔两个项目,“::3”就是间隔三个项目,如果是负数,就是从右侧取值,因此“::-1”就可以让反转整个串列。
a = [0,1,2,3,4,5,6,7,8,9] b = a[::3] c = a[3::2] d = a[::-1] e = a[::-2] print(b) # [0, 3, 6, 9] 每隔三項目取值 print(c) # [3, 5, 7, 9] 從第三個項目開始,每隔兩項目取值 print(d) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 反轉串列 print(e) # [9, 7, 5, 3, 1] 反轉串列,每隔兩個項目取值
复制串列
延续上方 slice() 的做法,如果使用“串列[:]”,效果等同于复制完整的串列,下方的程序码展示两种复制串列的方式,如果使用“b=a”的做法,虽然看起来像是复制了,但实际上 a 和 b 指向了同一个串列,所以当 a 删除了一个项目时,b 也会跟着改变,然而如果使用“d=c[:]”的做法,会建立一个“全新”的串列,当 c 发生改变时,不会影响 d。
a = [1, 2, 3]
b = a
del(a[1]) # 刪除 a 的第二個項目
print(a) # [1, 3]
print(b) # [1, 3]
c = [1, 2, 3]
d = c[:] # 複製 c 的所有項目變成一個新串列
del(c[1]) # 刪除 c 的第二個項目
print(c) # [1, 3]
print(d) # [1, 2, 3]
修改串列项目
串列有别于 tuple,串列的内容项目都是“可以修改”的,修改的方法有下列两种:“offset”和“slice()”。
offset
只要透过每个项目的 offset,就能够修改指定项目的内容。
a = ['apple','banana','orange'] a[0] = 'grap' print(a) # ['grap', 'banana', 'orange']slice()
使用 slice() 可以快速更换某一个范围的串列内容,下方的程序会将第 2、3、4 这三个项目更换为 100、200、300。
a = ['a','b','c','d','e'] a[1:4] = [100,200,300] print(a) # ['a', 100, 200, 300, 'e']指定更换的项目的数量,不一定要和原本的一样多 ( 可以比较少,也可以比较多 ),更换后会将范围的内容,完全换成新的内容。
a = ['a','b','c','d','e'] a[1:4] = [1,2,3,4,5,6,7,8,9] print(a) # ['a', 1, 2, 3, 4, 5, 6, 7, 8, 9, 'e']更换的内容不一定要是串列,只要是可以“迭代”的内容,例如字串、tuple,都可以将其替换进入串列中,下方的程序将 1~4 的位置换成 hello 文字,替换后 hello 文字会被拆分成一个个的字母。
a = ['a','b','c','d','e'] a[1:4] = 'hello' print(a) # ['a', 'h', 'e', 'l', 'l', 'o', 'e']
添加串列项目
Python 提供两种串列添加项目的方法:“append()”和“insert()”。
append()
append() 函数可以将项目添加在一个串列的尾端,如果添加的是一个序列 tuple,会原封不动的变成一个新元素 ( 只占有一个 offset,变成第二层序列或 tuple )。
a = ['a','b','c','d','e'] a.append(100) b = ['a','b','c','d','e'] b.append([100,200,300]) print(a) # ['a', 'b', 'c', 'd', 'e', 100] print(b) # ['a', 'b', 'c', 'd', 'e', [100, 200, 300]]insert()
如果已经知道要添加的位置 offset,使用 insert() 函数,就可以将指定的内容,从指定的位置加入,如果插入的位置设定为 0,会将内容插入在串列的开头,如果设定的位置大于串列长度,就会插入在尾端 ( 如果设定 -1,会插入在倒数第二个 )。
a = ['a','b','c','d','e'] a.insert(3,100) b = ['a','b','c','d','e'] b.insert(0,100) c = ['a','b','c','d','e'] c.insert(100,100) d = ['a','b','c','d','e'] d.insert(-1,100) print(a) # ['a', 'b', 'c', 100, 'd', 'e'] print(b) # [100, 'a', 'b', 'c', 'd', 'e'] print(c) # ['a', 'b', 'c', 'd', 'e', 100] print(d) # ['a', 'b', 'c', 'd', 100, 'e']
删除串列项目
Python 提供了四种方法,来删除串列的数据:“del”、“remove()”、“pop()”和“clear()”。
del
如果已经知道欲删除项目的“位置 offset”,就能够使用“del list(offset)”来删除指定的项目,项目支援中括号的语法 ( 参考上方 slice() 的做法 ),可以删除某个范围的项目,当项目被删除时,后方的项目会往前递补,取代原本的位置。
a = [0,1,2,3,4,5,6,7,8,9] del a[2] b = [0,1,2,3,4,5,6,7,8,9] del b[2:6] print(a) # [0, 1, 3, 4, 5, 6, 7, 8, 9] print(b) # [0, 1, 6, 7, 8, 9]remove()
如果不知道欲删除项目的“位置 offset”,可以使用 remove(项目内容) 删除该项目,如果有多个同样内容的项目,remove() 只会删除第一个找到的项目。
a = ['apple','apple','banana','orange'] a.remove('apple') print(a) # ['apple', 'banana', 'orange']pop()
pop() 函数可以“取出并移除”串列里的“一个项目”,使用的方式为“
pop(offset)”,如果不指定数值或数值为 -1,则会取出最后一个项目,取出的项目如果没有赋值给变数,这些项目就会消失。a = [0,1,2,3,4,5] b = a.pop(2) print(a) # [0, 1, 3, 4, 5] print(b) # 2
clear()
clear() 函数会清空整个串列的内容,使其变成一个空的串列。
a = [0,1,2,3,4,5] a.clear() print(a) # []
微信扫码关注
抖音扫码关注