list是Python种最基本的数据结构,也是最常用的数据类型。
作为一个即搞娱乐也做技术的团队,今天跟大家简单讲解一下list的使用。
list的位置或索引,第一个索引是0,第二个索引是1,以此类推
1、定义list
list1 = []# 定义一个空list
list2 = ['X','T',4,'B']# 定义一个string和int混合的list
list3 = ['H','Y','H']# 定义一个纯string的list
上面的list2可以看到,我们在list2[2]中存放了一个int类型的数字,这个数字是可以正常参与运算的,list支持多种类型的数据混合存放。
请各位记住上面定义的三个列表,因为我们下面将使用这三个list为大家讲解list及其内置函数的使用。
在我们使用的时候往往会用到二维三维甚至更多维的列表,但我们在定义的时候不能够用下面这样的方式定义。
❌list = [[]]
这样定义将会出现一个问题,就是list会超出最大长度,导致报错。所以我们在定义二维列表的时候需要用这样一个语句
✅list = [[forxinrange(10)]foryinrange(10)]
通过上面的定义方式,我们就获得了一个10x10的,所有元素都是0的二维列表。
2、更新
list3 = ['H','Y','H']
print('list3[2]: '+ list3[2])# 输出当前list3的第三个值
list3[2] ='T'# 将list3的第三个值 H 替换为 T
print('list3[2]: '+ list3[2])# 输出更新后list3的第三个值
运行结果
list3[2]: H
list3[2]: T
我们可以通过简单的赋值来更新list
3、删除
(1)del
del 列表名称[索引点]
list2 = ['X','T',4,'B']# 定义一个string和int混合的list
print(list2)# 输出list2
dellist2[2]# 删除list2的第三个值
print(list2)# 输出list2
运行结果
['X', 'T', 4, 'B']
['X', 'T', 'B']
列表支持对其中任一值的修改和删除
(2)pop
列表名称.pop(索引点)
list2 = ['X','T',4,'B']
list3 = ['H','Y','H']
print(list2)
print(list3)
list2.pop()
list3.pop(1)
print(list2)
print(list3)
运行结果
['X', 'T', 4, 'B']
['H', 'Y', 'H']
['X', 'T', 4]
['H', 'H']
使用pop函数可以移除列表中某个元素,list3.pop(1)就是对list3中索引1的元素进行移除。但如果没有指定索引时,会默认移除列表中的最后一个元素。
(3)remove
列表名称.remove(移除参数)
list3 = ['H','Y','H']
print(list3)
list3.remove('H')
print(list3)
运行结果
['H', 'Y', 'H']
['Y', 'H']
remove会先在列表中查询参数所在的位置,并移除第一个匹配到的元素。
(4)clear
列表名称.clear()
list3 = ['H','Y','H']
print(list3)
list3.clear()
print(list3)
运行结果
['H', 'Y', 'H']
[]
clear会将列表中的元素全部清空。
4、添加
list添加元素的方式比较多,比较起来也有较大的区别,适用于各种不同的场景。我们还是用简单的代码来给大家讲解一下list的添加操作。
(1)“+”号
list2 = ['X','T',4,'B']
list3 = ['H','Y','H']
list2 += list3# 在list2中加入list3
print(list2)
运行结果
['X', 'T', 4, 'B', 'H', 'Y', 'H']
这是将两个list相加得到一个新的返回值,这个方法看起来非常的容易理解,但因为需要创建新的list对象,会消耗额外的内存,在编程的时候会尽量避免使用“+”。
(2)‘:’号
列表名称[起始索引点:结束索引点]
list2 = ['XT','XT4','4','B','HYH','HY','H','XT4BHYH']
list = list2[1:5]
print(list)
运行结果
['XT4', '4', 'B', 'HYH']
我们可以使用‘:’来截取部分列表中的元素,返回一个新的列表
(3)append
列表名称.append(新增元素)
list1 = []# 定义一个空列表
print(list1)
list2 = ['X','T',4,'B']
list1.append(list2)
print(list1)
list3 = ['H','Y','H']
list1.append(list3)
print(list1)
运行结果
[]
[['X', 'T', 4, 'B']]
[['X', 'T', 4, 'B'], ['H', 'Y', 'H']]
我们一起分析一下这个运行结果。第一次输出list1,因为list1是一个空的列表,所以输出结果为空。第二次输出list1,似乎与直接输出list2没有不同,但与正常输出list2的不同之处在于外面多了一个中括号。第三次输出list1时,我们看到list2和list3分别作为了两个元素添加在了list1中。
为了证实这个想法,我们可以用以下代码
print(list1[])
print(list1[1])
运行结果
['X', 'T', 4, 'B']
['H', 'Y', 'H']
运行结果表明list1中的两个元素确实为list2和list3,这也就让list1变成了一个二维的列表,关于这部分在后面会提到。
从上面我们对append的实验,不难发现append会追加一个单个元素到list的结尾处,不管这个是什么类型,只接受一个参数。而这个参数可以在list中保持着原有的结构类型。
(4)extend
列表名称.extend(新增元素)
list2 = ['X','T',4,'B']
list3 = ['H','Y','H',1]
list4 = [1,2,3]
print(list2)
list3.append(list4)
list2.extend(list3)
print(list2)
运行结果
['X', 'T', 4, 'B']
['X', 'T', 4, 'B', 'H', 'Y', 'H', 1, [1, 2, 3]]
从运行结果可以看出extend和append有很大的不同,extend会将list3中的每一个元素分别添加进list2中,并且会保留每个元素的原有结构类型,相当于把list2和list3接在了一起。
(5)insert
列表名称.insert(索引点, 插入元素)
list3 = ['H','Y','H',1]
print(list3)
list3.insert(2,'???')
print(list3)
运行结果
['H', 'Y', 'H', 1]
['H', 'Y', '???', 'H', 1]
这是一个内置的为list添加单个元素的方法,其两个参数分别为索引点和插入的元素。
5、查询
(1)len
len(列表名称)
list3 = ['H','Y','H']
x =len(list3)
print(x)
运行结果
3
len可以返回列表中元素个数。
(2)max / min
max(列表名称)/min(列表名称)
list3 = ['H','Y','H']
i =max(list3)
j =min(list3)
print("max in list3 is "+ i)
print("min in list3 is "+ j)
运行结果
max in list3 is Y
min in list3 is H
max和min会返回列表中最大和最小的元素,直接用数字可能会给大家只有int才可以取最值的误解,这里使用了一个有string组成的list。这个list依旧可以取到最值,但前提是列表中的元素是相同的数据类型,如果既有int又有string是不可以的。
(3)index
列表名称.index(待查找元素, 查找开始索引点, 查找结束索引点)
list3 = ['H','Y','H']
x = list3.index('Y',,len(list3))
print(x)
运行结果
1
index可以返回列表中某个元素所在的第一个索引点,这里返回的是索引点,不是第几个元素。比如上面代码得到的结果,可以直接用list3[1]定位至'Y'。
(4)count
列表名称.count(待查找元素)
list3 = ['H','Y','H']
x = list3.count('h')
print(x)
运行结果
我们可以利用count来计数某个列表中的某个元素的个数。
6、操作
(1)reverse
列表名称.reverse()
list2 = ['X','T',4,'B']
list2.reverse()
print(list2)
运行结果
['B', 4, 'T', 'X']
用reverse可以将列表反向。
(2)sort
列表名称.sort(可选参数可使用该参数的方法进行排序, reverse=True(倒序)/Flase(正序)(默认为flase))
list2 = ['X','T','4','B','H','Y','H']
list2.sort()
print(list2)
运行结果
['4', 'B', 'H', 'H', 'T', 'X', 'Y']
列表中如果存在不同类型的元素,是无法进行排序的,所以将4定义为str,我们可以看到sort将list2进行了排序,由于并没有对reverse进行设置,所以默认为Flase进行了正序排序。也没有选择排序方法,所以只是对list中的元素进行了正序排序。
list2 = ['XT','XT4','4','B','HYH','HY','H','XT4BHYH']
list2.sort(key=len,reverse=True)
print(list2)
运行结果
['XT4BHYH', 'XT4', 'HYH', 'XT', 'HY', '4', 'B', 'H']
在上面的代码中,我们在使用sort时对key进行了设置,所以排序的规则因为使用了方法len,变成了对元素长度的排序。而因为将reverse设置为True,排序的顺序变成了倒序。
(3)copy
列表名称.copy()
list2 = ['X','T',4,'B']
list = list2.copy()
print(list)
运行结果
['X', 'T', 4, 'B']
copy做的操作跟这个方法名称一样直观,就是将列表复制一份,并返回值。很多人不明白copy和直接用‘=’号赋值有什么区别,下面用一个小例子解释一下。
list2 = ['X','T',4,'B']
list3 = ['H','Y','H']
list4 = list2.copy()
list5 = list2
print(list4)
print(list5)
list2.extend(list3)
print(list4)
print(list5)
运行结果
['X', 'T', 4, 'B']
['X', 'T', 4, 'B']
['X', 'T', 4, 'B']
['X', 'T', 4, 'B', 'H', 'Y', 'H']
从运行结果可以看出,用‘=’直接赋值的list5在list2的值发生改变时也发生了改变,这是一个引用赋值。而使用copy得到的list4与list2再无关系,是两个相对独立的变量。
如果你有什么想了解的知识技术,就回复我们吧,说不定下期就是为你准备的哟~
领取专属 10元无门槛券
私享最新 技术干货