欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python中的列表

程序员文章站 2024-01-07 11:04:28
...

列表

与元组不同,列表的长度是可变的,它所包含的内容也是可以修改的。你可以使用中括号[ ] 或是 list类型函数来定义列表,列表与元组非常相似(尽管元组不可修改),它们还是有许多函数用法是相似的。

list函数在数据处理中常用于将迭代器或者生成器转化为列表:

gen = range(10)
list = list(gen)

list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

1、增加和移除元素

使用append方法可以将指定元素添加到列表尾部;
而使用insert方法可以将元素插入到指定的列表位置,插入位置的范围在0到列表长度之间;(Python中的序列索引是从0开始的)
insert的反操作是pop方法,该操作会将特定位置的元素移除并返回;
当然也可以通过remove方法移除,该方法会定位第一个符合要求的值并移除它;
记住insert于append相比,计算代价更高。在不考虑性能的情况下,可以通过使用append和remove将列表用作一种完全合适的“多合集”数据结构。

使用in关键字可以检查一个值是否在列表中;
not关键字可以用作in的反义词,表示“不在”;
与字典、合集相比,检查列表中是否包含一个值是非常缓慢的,因为python中在列表进行了线性逐个扫描,而在字典和合集中python是同时检查所有元素的。

2、连接和联合列表

与元组类似,两列表可以使用+号连接,但如果你有一个已经定义的列表,你可以extend方法向该列表添加多个元素。
请注意通过添加内容来连接列表是一种相对高代价的操作,这是因为连接过程中创建了新列表,并且还要构建一个大型列表时使用extend方法比直接使用+号连接实现更快。

3.排序

你可以调用列表的sort方法对列表进行内部排序(无须新建一个对象):

a = [7,2,5,1,3]
a.sort()

a
[1, 2, 3, 5, 7]

sort有一些选项偶尔会派上用场。其中一项就是传递一个二级排序key——一个用于生成排序值的函数。比如,我们可以通过字符串的长度进行排序:

b = ['saw','small','he','foxes','six']
b.sort(key = len)

b
['he', 'saw', 'six', 'small', 'foxes']

该方法可以针对通用序列产生一个排序后的拷贝。

4.二分搜索

内建的bisect模块实现了二分搜索和已排序列表的插值。
其中bisect.bisect会找到元素应当被插入的位置,并保持序列排序;
bisect.insort将元素插入到相应位置:

import bisect
c = [1,2,2,2,3,4,7]

bisect.bisect(c,2)
4

bisect.bisect(c,5)
6

c
[1, 2, 2, 2, 3, 4, 7]

bisect.insort(c,6)

c
[1, 2, 2, 2, 3, 4, 6, 7]

bisect模块的函数并不会检查列表是否已经排序。因此,对未排序的列表使用bisect的函数虽然不会报错,但可能会导致不正确的结果。

5.切片

使用切片符号可以对大多数序列类型选取子集,它的基本形式是将start:stop传入到索引符号[ ]中:

seq = [7,2,3,7,5,6,0,1]

seq[1:5]
[2,3,7,5]

切片还可以将序列赋值给变量:

seq[3,4] = [6,3]

seq
[7,2,3,6,3,5,6,0,1]

由于起始位置start的索引是包含的,而结束位置stop的索引并不包含,当然start和stop是可以省略的,如果省略的话就会默认传入序列的起始位置或结束位置。
负索引也可以从序列的尾部进行索引:

seq[-4: ]
[5,6,0,1]

seq[-6:-2]
[6,3,5,6]

其中正序的第一个是从0开始,而倒序的第一个是从-1开始。

步进值step可以在第二个冒号后面使用,意思是每隔多少个数取一个值:

seq[::2]
[7,3,3,6,1]

而当你需要对列表或元组进行翻转时,有一种很聪明的用法就是向步进传值-1:

seq[::-1]
[1,0,6,5,3,6,3,2,7]
相关标签: python 列表

上一篇:

下一篇: