概述
列表(list)为Python语言基本数据类型之一,是一种把某些元素(数字、字符串等)按照特定顺序放在英文半角方括号中的有序序列(钟勇 2023:38)。不同列表元素之间使用英文半角逗号隔开。例如,[2, "python", 68, "頑張る%2ja--"]就是一个典型的列表。
与字符串中的字符一样,列表中的每个元素也被分配了一个索引号(即序号,代表该元素在列表中的位置)。具体说来,第1个元素的索引号是0,第2个元素的索引号是1,第3个元素的索引号是2……依此类推。同样,列表中的元素索引号也可以通过倒数的方式来计数,即最后1个元素的索引号为-1,倒数第2个元素的索引号为-2,倒数第3个元素的索引号为-3……依此类推。
与列表相关的常用操作有索引访问、运算处理、类型转换、元素添加等。
索引访问
列表的索引访问方式与字符串极为类似。也就是说,基于索引号访问和提取特定列表元素或子列表时,只需在列表后面添加一个方括号,并在括号中填写待访问的单个元素的索引号或待访问的子列表的相关索引号范围。请看以下代码示例。
1 name_list = ['田中', '佐藤', '鈴木', '山田']
2 print(name_list[1]) # 通过索引号访问和提取单个元素
3 print(name_list[0:3]) # 通过索引号范围访问和提取子列表
4 print(name_list[:3]) # 通过省略起始索引号的方式访问和提取子列表
5 print(name_list[1:]) # 通过省略终止索引号的方式访问和提取子列表
6 print(name_list[-3:-1]) # 通过倒数索引号范围访问和提取子列表
7 print("")
8 name_nested_list = [['田中', '佐藤', '鈴木', '山田'], ['柳', '江戸川']]
9 print(name_nested_list[0][0:3]) # 先通过索引号访问和提取单个元素,再进一步通过索引号范围访问和提取该元素中的子列表
我们在第2行代码中通过索引号1访问和提取了列表name_list中的单个元素,在第3行代码中通过索引号范围(0:3)访问和提取了列表name_list中的一个子列表,在第4、5行代码中分别通过省略起始索引号(:3)和终止索引号(1:)的方式访问和提取了列表name_list中的相关子列表,在第6行代码中通过倒数索引号范围(-3:-1)访问和提取了列表name_list中的一个子列表,最后在第9行代码中先通过索引号0访问和提取嵌套列表name_nested_list中的单个元素(即第一个元素['田中', '佐藤', '鈴木', '山田']),再进一步通过索引号范围(0:3)访问和提取了该元素中的子列表。
运算处理
与字符串一样,针对列表的运算一般也只能使用算术运算符中的加号和乘号。其中,加号可以将两个列表拼接起来,而乘号则可让某个列表重复指定次数。请看以下代码示例。
1 list1 = ["こんにちは", "世界"]
2 list2 = ["これから", "頑張る"]
3 result1 = list1 + list2 # 使用加号将list1和list2中的列表拼接起来
4 print(result1)
5 result2 = result1 * 2 # 使用乘号让result1中的列表重复2次
6 print(result2)
我们在第3行代码中使用加号将变量list1和list2中的列表拼接起来,而在第5行代码中则使用乘号让变量result1中的列表重复了2次。
类型转换
列表与字符串之间可通过内置方法join()、内置函数list()以及内置方法split()进行相互转换。其中,join()方法用于将列表中的元素以指定字符串连接起来形成一个新字符串,其常用语法结构为“str.join(iterable)”,结构中的str指定用作连接符的字符串,参数iterable表示列表等需要连接的对象;list()函数用于将字符串转换为一个由该字符串中各个字符(作为列表元素)构成的列表,其常用语法结构为“list(iterable)”,参数iterable表示字符串等待转换的对象;split()方法则用于将字符串按照指定分隔符拆分成列表,其常用语法结构为“str.split(separator)”,参数separator指定用作分隔符的字符串,若省略该参数,则默认分隔符为空白字符。请看以下代码示例。
1 words = ["P", "y", "t", "h", "o", "n"]
2 result1 = "".join(words) # 用空字符串连接列表words中的元素
3 print(result1)
4 result2 = "---".join(words) # 用字符串"---"连接列表words中的元素
5 print(result2)
我们在第2行代码中调用join()方法,用空字符串连接列表words中的所有元素形成一个新字符串(相当于将列表words中的所有元素直接拼接起来),而在第4行代码中则用字符串"---"连接列表words中的所有元素形成另外一个新字符串。
请继续看以下代码示例。
1 string = "コーパス言語学"
2 char_list = list(string) # 将string中的字符串转换为字符列表
3 print(char_list)
我们在第2行代码中调用list()函数将string中的字符串转换成了一个由该字符串中各个字符所构成的列表。
最后请看以下代码示例。
1 string = "りんご## バナナ## みかん"
2 result1 = string.split('##') # 将string中的字符串按照指定分隔符'##'拆分成列表
3 print(result1)
4 result2 = string.split() # 将string中的字符串按照空白字符拆分成列表
5 print(result2)
我们在第2行代码中调用split()方法将string中的字符串按照指定分隔符'##'拆分成了一个列表,而在第4行代码中则将string中的字符串按照空白字符拆分成了列表。
元素添加
当我们想把某些数据作为元素储存到列表当中时,通常会先创建一个空列表,然后再往里面不断添加数据(即元素)。列表元素的添加一般会使用内置方法append()。该方法的常用语法结构为“list.append(object)”,参数object表示要添加到列表末尾的元素。请看以下代码示例。
1 data_list = []
2 data_list.append(1) # 将数字1作为元素添加到列表末尾
3 print(data_list)
4 data_list.append("a") # 将字符串"a"作为元素添加到列表末尾
5 print(data_list)
6 data_list.append("あ") # 将字符串"あ"作为元素添加到列表末尾
7 print(data_list)
我们通过第2行代码调用append()方法将数字1作为元素添加到列表data_list末尾,之后继续在第4和6行代码中依次将字符串"a"和"あ"作为元素添加到了列表data_list的末尾。不难发现,data_list列表中的元素一直都在发生变化。
参考文献
1. 钟勇, 2023. Python日语数字人文之语料库语言学技术及其应用[M]. 南京: 东南大学出版社.
同系列其他文章: