Python基础 - Python列表操作详解

Python列表操作详解

Posted by 王富杰 on Wednesday, February 19, 2025

一、列表类型的生成和类型转换

列表类型是通过list()这个功能实现的。也就是说只要产生一个列表,底层一定调用了list()。 同样的list()还可以实现其他类型到列表类型的转换,它可以把可迭代对象转换为列表。

>>> list("hello")
['h', 'e', 'l', 'l', 'o']
>>> list({"a":1, "b":2})
['a', 'b']

二、列表的内置方法

同字符串一样,列表也内置了多种方法。

2.1、索引取值

列表是按顺序排列的,所以它支持按索引取值。

>>> l = ['a', 'b', 'c']
>>> l[1]
'b'
>>> l[-1]
'c'
>>> l[2] = 'd'
>>> l
['a', 'b', 'd']
>>> l[3] = 'e'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

从实例可以看出,列表一样一直正向索引取值和负向索引取值。和字符串不同的是,列表属于可变类型,可以根据索引改值。但是不存在的索引不能通过这种方式添加。

2.2、列表追加

给列表添加新的值可以使用列表追加的功能。通过append()函数实现。注意:列表追加只会在末尾追加值。

>>> l = ['a', 'b', 'c']
>>> l.append(4)
>>> l
['a', 'b', 'c', 4]

2.3、列表插入

如果需要再列表的中间插入数据,就需要用到insert()功能。它接受两个参数,第一个是要插入的位置,第二个是元素值。

>>> l = ['a', 'b', 'c']
>>> l.insert(1, 2)
>>> l
['a', 2, 'b', 'c']
>>> l.insert(0, 0)
>>> l
[0, 'a', 2, 'b', 'c']

如果l写一个很大的数,超过了当前列表的长度,它会默认插到末尾。

2.4、列表扩展

列表扩展是将两个列表合并为1个列表。用extend()函数实现。

>>> l = ['a', 'b', 'c']
>>> l1 = [1, 2, '3']
>>> l + l1
['a', 'b', 'c', 1, 2, '3']
>>> l.extend(l1)
>>> l
['a', 'b', 'c', 1, 2, '3']

extend()接受的参数是可迭代对象,因此字符串,字典等也可以扩展到列表中。列表也是支持+号的,它会生成一个新列表,不改变两个原列表的值。

2.5、列表删除值

前面我们学过,可以使用del删除一个值,它的本质是解除变量和值的引用关系。但是达到的效果就是删除。

>>> l = ['a', 'b', 'c']
>>> del l[1]
>>> l
['a', 'c']

del可以删除列表的元素,但是del不是列表自身的功能,而且也没有返回值。列表自身提供了pop()函数实现删除功能。pop()会删除指定索引位置的元素,默认删除最后一个元素,

>>> l = ['a', 'b', 'c']
>>> res = l.pop()
>>> print(res, l)
c ['a', 'b']
>>> res = l.pop(0)
>>> print(res, l)
a ['b']

删除列表还有第三种方式,就是remove()。remove()是根据元素值来删除,是没有返回值的。

>>> l = ['a', 'b', 'c']
>>> l.remove('a')
>>> l
['b', 'c']

2.6、切片

列表的切片和字符串是一样的,步长step默认为1,begin不写默认从0开始,end不写默认到末尾结束。如果步长为正数,则end必须大于begin。步长如果为负数,则end必须小于begin。整体遵循左闭右开原则。

>>> l = ['a', 'b', 'c', 'd']
>>> l[0:2]
['a', 'b']

列表切片一样支持反向切片和指定步长,这里我们就不再一一演示了。另外需要注意的是:切片不是剪切,而是对原来列表的拷贝,这里的拷贝是浅拷贝。

2.7、获取长度len

python提供了内置函数len()可以用来列表元素的个数。

>>> l = ['a', 'b', 'c', 'd']
>>> len(l)
4

2.8、成员运算

成员运算包含in和not in。用于判断一个值是否在列表里面。

>>> l = ['a', 'b', 'c', 'd']
>>> 'a' in l
True
>>> 'e' not in l
True

2.9、循环遍历

列表也属于可迭代对象,支持for循环。需要注意的是,不能在遍历列表是,在循环体内对列表进行修改。

l = ['a', 'b', 'c', 'd']
for i in l:
    print(i)

2.10、其他常用操作汇总

1、统计元素出现的次数 count

>>> l = ['a', 'b', 'c', 'a', 'a']
>>> l.count('a')
3

2、查找某个元素的索引 index

>>> l = ['a', 'b', 'c', 'a', 'a']
>>> l.index('a')
0

如果元素存在多次,则默认从左往右找,返回第一个的位置。

3、清空元素 clear

>>> l = ['a', 'b', 'c', 'a', 'a']
>>> l.clear()
>>> l
[]

4、列表翻转 reverse

>>> l = ['a', 'b', 'c', 'd']
>>> l[::-1]
['d', 'c', 'b', 'a']
>>> l.reverse()
>>> l
['d', 'c', 'b', 'a']

切片一样也可以实现列表翻转,不同的是,切片是产生一个新列表不改变原列表。但是reverse()是将原列表进行翻转。

5、列表排序 sort

>>> l = [33, 43, 12, 9]
>>> l.sort()
>>> l
[9, 12, 33, 43]
>>> l.sort(reverse=True)
>>> l
[43, 33, 12, 9

默认是按照升序排序。如果降序需要加上关键字参数reverse=True。如果列表加入字符串元素再排序就会报错,因为数字和字符串不能比大小。sort只能对同一类型的元素进行排序,例如对字符串排序是按照ascii表比大小。

「真诚赞赏,手留余香」

WangFuJie Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付