1.4 列表(List) | Python 最常用的数据结构之一¶
列表简介¶
列表 (List)
是 Python
中最基本的数据类型之一,列表中的每个元素均会分配一个数字,用以记录位置,我们称之为
索引 (Indexes)
,索引值从 0 开始,依次往后计数。
列表使用中括号- []
包裹,元素之间使用逗号- ,
分隔,其元素可以是数字、字符串、列表等其他任何数据类型。
列表同样支持索引、更新、删除、嵌套、拼接、成员检查、截取、追加、扩展、排序等相关操作,下面我们通过案例来学习。
初识列表¶
使用中括号定义一个空列表
>>> def_list = []
>>> def_list
[]
>>> type(def_list) # type 查看数据类型
<class 'list'>
使用内置方法
list()
定义一个空列表
>>> def_list = list()
>>> def_list
[]
>>> type(def_list) # type 查看数据类型
<class 'list'>
使用索引获取列表元素
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list[0] # 取第一个元素
'my'
>>> def_list[-1] # -1 表示取最后一个
'kele'
>>> def_list[5] # 超出索引值会报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
通过索引更新列表元素
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list[-1] = "xuebi" # 更新对应索引元素的值
>>> def_list
['my', 'name', 'is', 'xuebi']
使用
del
语句删除列表元素
>>> def_list = ["my", "name", "is", "kele"]
>>> del def_list[0] # 删除第一个元素
>>> def_list
['name', 'is', 'kele']
>>> def_list = ["my", "name", "is", "kele"]
# 删除第一个元素 "my"
# 再删除新列表的第二个元素 "is"
>>> del def_list[0], def_list[1]
>>> def_list
['name', 'kele']
列表也可嵌套
>>> nesting_list = ["my", "name", ["is", "kele"]]
>>> type(nesting_list)
<class 'list'>
>>> nesting_list[2]
['is', 'kele']
# 怎么获取嵌套列表中的元素?
>>> nesting_list[2][0]
'is'
基础操作符¶
列表基础操作符可参照下表:
符号 |
说明 |
---|---|
|
列表拼接 |
* |
重复元素 |
in / not in |
成员判断 |
[] |
索引取值 |
[index:index] |
列表截取 |
使用
+
拼接列表
>>> def_list1 = ["my", "name"]
>>> def_list2 = ["is", "kele"]
>>> def_list1 + def_list2
['my', 'name', 'is', 'kele']
使用
*
重复列表元素
>>> ["repeat two"] * 2
['repeat two', 'repeat two']
判断元素是否在列表中,是返回 True,否则返回 False
>>> def_list = ["my", "name", "is", "kele"]
>>> "kele" in def_list
True
>>> "xuebi" in def_list
False
>>> "kele" not in def_list
False
>>> "xuebi" not in def_list
True
使用索引取值
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list[-1] # -1 表示取最后一个
'kele'
>>> def_list[5] # 超出索引值会报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
使用
:
截取列表,遵循左开右闭原则
>>> def_list = ["Hi", "my", "name", "is", "kele"]
# 截取第一至第二个元素(不包括第二个元素)
>>> def_list[1:2]
['my']
# 截取第一至第四个元素(不包括第四个元素)
>>> def_list[1:4]
['my', 'name', 'is']
# 超出索引值并不会报错
>>> def_list[1:10]
['my', 'name', 'is', 'kele']
# 全列表截取(复制列表)
>>> def_list[:]
['my', 'name', 'is', 'kele']
# 指定步长,截取列表
# 步长为 2 ,表示每两个元素取一个元素
>>> def_list[0:5:2]
['Hi', 'name', 'kele']
# 怎么反转列表?
>>> def_list[::-1]
['kele', 'is', 'name', 'my', 'Hi']
列表基础函数¶
列表基础函数可参照下表:
函数 |
说明 |
---|---|
len(list) |
计算列表的长度 |
max(list) |
返回列表中最大的元素 |
min(list) |
返回列表中最小的元素 |
list(seq) |
将其他序列转换为列表 |
计算列表长度
>>> def_list = num_list = [1, 4, 3, 11, 7, 8, 15]
>>> len(num_list)
7
返回列表最大值、最小值
>>> def_list = num_list = [1, 4, 3, 11, 7, 8, 15]
>>> max(num_list)
15
>>> min(num_list)
1
将其他序列列转换为列表
>>> str_list = "Hi_kele"
>>> list(str_list)
['H', 'i', '_', 'k', 'e', 'l', 'e']
>>> num_list = "123456"
>>> list(num_list)
['1', '2', '3', '4', '5', '6']
# 数字类型为不可迭代对象,所以使用时会报错
>>> num_list = 123456
>>> list(num_list)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
列表自建方法¶
Python
中的 list
类提供了列表操作相关的自建方法,需要时直接调用即可。
使用
append
方法给列表末尾追加元素
# 使用语法:list.append(obj)
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.append(1)
>>> def_list
['my', 'name', 'is', 'kele', '1']
使用
count
统计某个元素在列表中出现的总次数
# 使用语法:list.count(obj)
>>> def_list = ["kele", "name", "is", "kele"]
>>> def_list.count("kele")
2
>>> def_list.count("name")
1
>>> def_list.count("xuebi")
0
使用
index
方法寻找某个元素在列表中第一次出现的索引值
# 使用语法:list.index(obj)
>>> def_list = ["kele", "name", "is", "kele"]
>>> def_list.index("kele")
0
>>> def_list.index("name")
1
# 元素不在列表中会报错
>>> def_list.count("xuebi")
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: 'xuebi' is not in list
使用
insert
方法在指定位置插入元素
# 使用语法:list.insert(index, obj)
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.insert(0, "python")
>>> def_list
['python', 'my', 'name', 'is', 'kele']
# 超出索引值不报错,将元素插入到列表末尾
>>> def_list.insert(10, "xuebi")
>>> def_list
['python', 'my', 'name', 'is', 'kele', 'xuebi']
使用
pop
方法弹出列表中的某个元素,默认弹出最后一个元素
# 使用语法:list.pop(index=-1)
>>> def_list = ["my", "name", "is", "kele"]
# 返回弹出的元素
>>> def_list.pop()
'kele'
>>> def_list
['my', 'name', 'is']
>>> def_list.pop(0)
'my'
>>> def_list
['name', 'is']
# 超出索引值会报错
>>> def_list.pop(10)
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: pop index out of range
使用
remove
方法删除列表中的某个元素,默认删除第一次出现的元素
# 使用语法:list.remove(obj)
>>> def_list = ["kele", "name", "is", "kele"]
>>> def_list.remove("kele")
>>> def_list
['name', 'is', 'kele']
>>> def_list.remove("xuebi")
# 元素不存在会报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: list.remove(x): x not in list
使用
reverse
方法反转列表
# 使用语法:list.reverse()
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.reverse()
>>> def_list
['kele', 'is', 'name', 'my']
使用
sort
方法对列表进行排序,使用语法list.sort(cmp=None, key=None, reverse=False)
参数说明:
cmp -- 可选参数,如果指定该参数,则使用该参数的方法进行排序。
key -- 主要用于比较元素,只有一个参数,指定可迭代对象中的一个元素进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
# 使用语法:list.sort(cmp=None, key=None, reverse=False)
# 不指定参数,默认为降序
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.sort()
>>> def_list
['is', 'kele', 'my', 'name']
# 指定为升序
>>> def_list.sort(reverse=True)
>>> def_list
['name', 'my', 'kele', 'is']
# 指定可迭代对象中的一个元素进行排序
>>> def_list = ["my2", "name8", "is5", "keke9"]
# 按照序列的最后一个元素排序
>>> def key_func(seq):
... return seq[-1]
>>> def_list.sort(key=key_func)
>>> def_list
# 按照每个元素末尾的数字排序
['my2', 'is5', 'name8', 'keke9']
# 思考:怎么实现两种规则的排序,如既按照元素中的字母排序,又按照元素中的数字排序?
使用
extend
方法扩展列表
# 使用语法:list.extend(seq)
>>> def_list1 = ["my", "name"]
>>> def_list2 = ["is", "kele"]
>>> def_list1.extend(def_list2)
>>> def_list1
['my', 'name', 'is', 'kele']
使用
copy
方法复制列表
# 使用语法:list.copy()
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.copy()
['my', 'name', 'is', 'kele']
使用
clear
方法清空列表元素
# 使用语法:list.clear()
>>> def_list = ["my", "name", "is", "kele"]
>>> def_list.clear()
>>> def_list
[]
列表扩展¶
使用大于号
>
、小于号<
、等于号==
比较两个列表的大小。
"""比较原理:
从第一个元素开始比较,若相等,则继续比较,返回第一个不相等元素比较的结果。
若所有元素比较均相等,且列表长度一样则两列表相等,否则长度较大的列表大。
"""
# 判断两列表相等
>>> ["a", "b"] == ["a", "b"]
True
>>> ["a", "b"] == ["a", "c"]
False
# 判断两列表大于或者等小于
>>> ["a", "c"] > ["a", "b", "c"]
True
>>> ["a", "b"] < ["a", "b", "c"]
True
使用
and
、or
进行对列表表达式进行逻辑判断 。
"""判断原理:对表达式判断进行逻辑判断
1、and - 有假则为假
2、 or - 有真则为真
"""
# and
>>> ["a"] == ["a"] and ["a"] == ["a"]
True
>>> ["a"] == ["a"] and ["a"] == ["b"]
False
# or
>>> ["a"] == ["a"] or ["a"] == ["a"]
True
>>> ["a"] == ["a"] or ["a"] == ["b"]
True
总结¶
列表作为 Python 最基本的数据类型之一,在工作中十分常用,一般与其他数据类型搭配使用,用于构建数据结构。
定义列表可直接使用
[]
, 也可选择list()
方法,个人偏向于前者。基础操作符中的列表截取、或称之为切片,很有意思,建议多探讨、研究。
使用
list()
方法转换其他序列时,转换对象需为可迭代对象,否则会报错。自建方法均比较常用,索引的相关操作,需考虑索引值范围,调用方式有两种,一是使用关键字
list.方法(参数)
,二是使用定义的列表变量名.方法(参数)
,其原理都是调用Python
中的list
类中的方法,案例中使用后者。文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,列表相关的知识点也可进行分享。