Python 教程 - 列表常用方法
在Python 教程 - 列表文章中已经介绍了列表的创建、新增、修改等功能,这篇文章将介绍列表的查询、排序、复制等其他相关操作方法。
常用操作方法
方法 | 说明 |
---|---|
sort()、 sorted() | 排序 |
slice()、reverse() | 反转 |
slice、copy()、list()、deepcopy() | 复制 |
index() | 获取元素 offset |
len() | 获取列表长度 |
count() | 计算内容出现次数 |
join() | 拼接内容 |
in | 检查元素是否存在 |
、==、!=、>、< | 比较列表 |
* | 重复元素 |
sort()、 sorted()
Python 提供了 sort()
和 sorted()
两种列表的函数,函数内包含 key
和 reverse
参数(可都不填),key
表示进行比较的元素,reverse
不填则使用默认 False,进行升序排序(从小到大),如果参数为 True 进行降序排序(从大到小),如果排序的是字符串,以字母的顺序进行排序。
sort()
sort() 函数使用后,会直接将原本的列表项目进行排序,因此会改变原始的列表。
a = [0,3,2,1,4,9,6,8,7,5]
a.sort()
print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a.sort(reverse=True)
print(a) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
sorted()
sorted() 函数使用后,会产生一个排序过后的新列表,因此不会改变原始的列表。
a = [0,3,2,1,4,9,6,8,7,5]
b = sorted(a)
c = sorted(a, reverse=True)
print(a) # [0, 3, 2, 1, 4, 9, 6, 8, 7, 5]
print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(c) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
如果列表的内容也是列表,排序时可以通过 key
参数,指定对应的项进行排序,下面的示例使用匿名函数 lambda
,针对每个项的第二个子项进行排序(如果没有设置 key
参数,默认都以第一个项进行排序)。
a = [[1,2,3],[9,8,7],[2,4,6],[3,1,9]]
b = sorted(a)
c = sorted(a, key = lambda s: s[1])
print(a) # [[1, 2, 3], [9, 8, 7], [2, 4, 6], [3, 1, 9]]
print(b) # [[1, 2, 3], [2, 4, 6], [3, 1, 9], [9, 8, 7]] 使用第一个项目 1,2,3,9 排序
print(c) # [[3, 1, 9], [1, 2, 3], [2, 4, 6], [9, 8, 7]] 使用第二个项目 1,2,4,8 排序
反转列表
Python 提供了两种反转列表的方法:
slice
使用 slice 反转列表方法不会改变原始列表,会产生一个新的列表,在产生新列表时使用[::-1]
,就能反转列表内容。
a = [0,1,2,3,4,5]
b = a[::-1]
print(a) # [0, 1, 2, 3, 4, 5]
print(b) # [5, 4, 3, 2, 1, 0]
reverse()
使用 reverse() 函数可以反转列表,但反转之后,会改变原始列表。
a = [0,1,2,3,4,5]
a.reverse()
print(a) # [5, 4, 3, 2, 1, 0]
复制列表
Python 提供四种复制列表的方法:
slice、copy()、list()
slice、copy()、list() 三种方式都可以快速复制一个新的列表。
a = [0,1,2,3,4,5]
b = a[:]
c = a.copy()
d = list(a)
print(a) # [0, 1, 2, 3, 4, 5]
print(b) # [0, 1, 2, 3, 4, 5]
print(c) # [0, 1, 2, 3, 4, 5]
print(d) # [0, 1, 2, 3, 4, 5]
deepcopy()
上述的三种方式只能针对“元素内容不会发生变化”的列表,如果元素的“深层内容”会发生变化,就会出现奇怪的现象。例如,下面的程序执行后,当 a 改变时理应不应该影响到 b、c、d 这三个新列表,但执行结果却发现 b、c、d 的内容也跟着改变了。
a = [0,1,2,3,4,[100,200]]
b = a[:]
c = a.copy()
d = list(a)
a[-1][0]=999
print(a) # [0, 1, 2, 3, 4, [999, 200]]
print(b) # [0, 1, 2, 3, 4, [999, 200]]
print(c) # [0, 1, 2, 3, 4, [999, 200]]
print(d) # [0, 1, 2, 3, 4, [999, 200]]
如果要解决这个问题,就必须要 import copy() 模组,使用 deepcopy() 进行深度复制,就能产生一个完全独立的新列表。
import copy
a = [0,1,2,3,4,[100,200]]
b = a[:]
c = a.copy()
d = list(a)
e = copy.deepcopy(a)
a[-1][0]=999
print(a) # [0, 1, 2, 3, 4, [999, 200]]
print(b) # [0, 1, 2, 3, 4, [999, 200]]
print(c) # [0, 1, 2, 3, 4, [999, 200]]
print(d) # [0, 1, 2, 3, 4, [999, 200]]
print(e) # [0, 1, 2, 3, 4, [100, 200]] 使用 deepcopy 的没有被改变
index() 取得元素 offset
index()
函数可以取得列表中某个元素的索引(offset),如果有多个同样内容的元素,以第一个找到的为主。
a = ['apple','banana','banana','orange']
print(a.index('banana')) # 1
len() 取得列表长度
len() 函数可以取得列表的长度 ( 里面有几个元素)。
a = ['apple','banana','banana','orange']
print(len(a)) # 4
count() 计算元素出现次数
count() 函数可以计算列表中,某些元素出现的次数。
a = ['apple','banana','banana','orange']
print(a.count('banana')) # 2
print(a.count('grap')) # 0
join() 拼接列表内容
join()
函数可以将一个列表里所有的元素,拼接成一个字符串,使用时可以指定拼接的字符串。
a = ['hello world', 'I am oxxo', 'how are you?']
b = ', '.join(a) # 使用逗号,进行拼接
print(b) # hello world, I am oxxo, how are you?
in 检查内容是否存在
通过元素 in 列表
的方法,可以检查列表中是否存在某些内容,如果存在则返回 True,不存在则返回 False ( 使用元素 not in 集合
可以判断不存在 )。
a = ['apple','banana','banana','orange']
print('orange' in a) # True
print('melon' in a) # False
比较列表
使用 ==、!=,可以比较两个列表是否相等,使用 <、<=、>=、>,可以比较列表的长度,注意,列表的比较只能针对相同类型的数据,如果比较数值和字符串的内容,就会发生错误。
a = [1,2,3,4]
b = [1,2,3,4,5]
print(a==b) # False
print(a>=b) # False
print(a<b) # True
print(a!=b) # True
使用 * 号重复元素
使用*可以重复列表的内容,使其变成一个新的列表。
a = ['apple','banana']
b = a*3
print(a) # ['apple', 'banana']
print(b) # ['apple', 'banana', 'apple', 'banana', 'apple', 'banana']
转载自:https://juejin.cn/post/7356550566536478772