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

辛丑年丙申月乙巳日|序列

程序员文章站 2024-03-02 19:36:52
...

列表

列表里存储的是对象的地址,保证了列表是轻量级,节约内存空间。

方法 要点 描述
list.append(x) 增加元素 将元素 x 增加到列表 list 尾部
list.extend(aList) 增加元素 将列表 alist 所有元素加到列表 list 尾部
list.insert(index,x) 增加元素 在列表 list 指定位置 index 处插入元素 x
list.remove(x) 删除元素 在列表 list 中删除首次出现的指定元素 x
list.pop([index]) 删除元素 删除并返回列表 list 指定为止 index 处的元素,默认是最后一个元素
list.clear() 删除所有元素 删除列表所有元素,并不是删除列表对象
list.index(x) 访问元素 返回第一个 x 的索引位置,若不存在 x 元素抛出异常
list.count(x) 计数 返回指定元素 x 在列表 list 中出现的次数
len(list) 列表长度 返回列表中包含元素的个数
list.reverse() 翻转列表 所有元素原地翻转
list.sort() 排序 所有元素原地排序
list.copy() 浅拷贝 返回列表对象的浅拷贝

Python 的列表大小可变,根据需要随时增加或缩小

列表的创建

基本语法[]创建

>>>a=[10,20,'sys']
>>>a=[]#创建一个空列表对象

list()创建

>>>a=list()#创建一个空的列表对象
>>>a=list(range(10))
#range(10)是一个可迭代的range对象
#list经常把可迭代的数据转成列表
>>>a
[0,1,2,3,4,5,6,7,8,9]
>>>a=list("Laiiike,yu")
>>>a
['L','a','i','i','i','k','e',',','y','u']

range()创建整数列表

range([start,]end[,step])
中括号内不写的话start默认为0,step默认为1,end必写。

推导式生成列表

>>> a = [x*2 for x in range(100) if x%9==0] 
#通过 if 过滤元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

列表的增加

append()

列表尾部添加新的元素,推荐选用。

>>> a = [20,40]
>>> a.append(80)
>>> a
[20, 40, 80]

+运算符

并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次
复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

>>> a = [20,40]
>>> id(a)
46016072
>>> a = a+[50]
>>> id(a)
46015432

extend()

将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。

>>> a = [20,40]
>>> id(a)
46016072
>>> a.extend([50,60])
>>> id(a)
46016072

insert()插入元素

插入列表指定位置,并对该位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。
类似的有remove(),pop(),del(),他们删除非尾部元素是也会发生操作位置后面元素的移动。

>>> a = [10,20,30]
>>> a.insert(2,100)
>>> a
[10, 20, 100, 30]

乘法扩展

>>> a = ['sxt',100]
>>> b = a*3
>>> a
['sxt', 100]
>>> b
['sxt', 100, 'sxt', 100, 'sxt', 100]

列表元素的删除

实际上也是元素的拷贝。

del 删除

删除列表指定位置的元素
指定位置后边的元素依次拷贝到前面。

>>> a = [100,200,888,300,400]
>>> del a[1]
>>> a
[100,200,300,400]

pop()方法

pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。相当于弹夹,将最后一个元素弹出,直到列表里的元素为空。

>>> a = [10,20,30,40,50]
>>> a.pop()
50#弹出的元素
>>> a
[10, 20, 30, 40]
>>> a.pop(1)
20#弹出的元素
>>> a
[10, 30, 40]

remove()

删除首次出现的指定元素,若不存在该元素抛出异常。
括号里放的是元素是值而不是索引。

>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.remove(20)
>>> a
[10, 30, 40, 50, 20, 30, 20, 30]
>>> a.remove(100)
Traceback (most recent call last):
	File "<pyshell#208>", line 1, in <module>
		a.remove(100)
ValueError: list.remove(x): x not in list

列表元素访问和计数

通过索引直接访问元素

[0, 列表长度-1],超过这个范围则会抛出异常。

>>> a = [10,20,30,40,50,20,30,20,30]
>>> a[2]
30

index()获得指定元素在列表中首次出现的索引。

index(value,[start,[end]])

>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.index(20)
1
>>> a.index(20,3) #从索引位置 3 开始往后搜索的第一个 20
5
>>> a.index(30,5,7) #从索引位置 5 到 7 这个区间,第一次出现 30 元素的位置
6

count()获得指定元素在列表中出现的次数

count()可以返回指定元素在列表中出现的次数。

>>> a = [10,20,30,40,50,20,30,20,30]
>>> a.count(20)
3

len()返回列表长度

len()返回列表长度,即列表中包含元素的个数。

>>> a = [10,20,30]
>>> len(a)
3

成员资格的判断

in/not in
在为True,不在为False。
(也可以用count()>0判断)

切片操作

[起始偏移量 start:终止偏移量 end[:步长 step]]
包头不包尾
三个量是正数

操作和说明 示例 结果
[:] 提取整个列表 [10,20,30][:] [10,20,30]
[start:]从 start 索引开始到结尾 [10,20,30][1:] [20,30]
[:end]从头开始知道 end-1 [10,20,30][:2] [10,20]
[start:end]从 start 到 end-1 [10,20,30,40][1:3] [20,30]
[start:end:step] 从 start 提取到 end-1,步长是 step [10,20,30,40,50,60,70][1:6:2] [20, 40,60]

三个量是负数

示例 说明 结果
[10,20,30,40,50,60,70][-3:] 倒数三个 [50,60,70]
10,20,30,40,50,60,70][-5:-3] 倒数第五个到倒数第三个(包头不包尾) [30,40]
[10,20,30,40,50,60,70][::-1] 步长为负,从右到左
反向提取
[70, 60, 50, 40, 30, 20,10]

列表的遍历

for obj in listObj:
	print(obj)

复制列表所有的元素到新列表对象

list1 = [30,40,50]
list2 = list1
#将list2指向列表对象,列表对象本身元素并没有复制
list1 = [30,40,50]
list2 = []
#实现复制操作

列表排序

修改原列表,不建新列表

>>> a = [20,10,30,40]
>>> a.sort() #默认是升序排列
>>> a
[10, 20, 30, 40]
>>> a = [10,20,30,40]
>>> a.sort(reverse=True) #降序排列
>>> a
[40, 30, 20, 10]
>>> import random
>>> random.shuffle(a) #随机打乱顺序
>>> a
[20, 40, 30,10]

建新列表的排序

>>> a = [20,10,30,40]
>>> id(a)
45840584
>>> b = sorted(a)
>>> b
[10, 20, 30, 40]
>>> id(a)
45840584
>>> id(b)
46016072#生成新对象
>>> c = sorted(a,reverse=True) #降序
>>> c
[40, 30, 20, 10]

reverse()返回迭代器

包含一个指针,从列表末端往前指,迭代完成后指针指向列表前段,是一个空的对象。

>>> a = [20,10,30,40]
>>> c = reversed(a)
>>> c
<list_reverseiterator object at 0x0000000002BCCEB8>
>>> list(c)
[40, 30, 10, 20]
>>> list(c)
[]#只能调用一次迭代器

列表其他内置函数汇总

max 和min

>>> a = [3,10,20,15,9]
>>> max(a)
20
>>> min(a)
3

sum

对列表里元素求和,对非数值型列表运算会报错

>>> a = [3,10,20,15,9]
>>> sum(a)
57

多维列表

层层嵌套。
二维列表帮助储存表格信息

print()与print(’\n’)

print()自带换行符,输出换一行
print(’\n’)先输出’\n’,再换行

元组

元组没有增加元素、修改元素和删除元素。
元组的访问和处理速度比列表快。
元组可以作为字典的键,而列表永远不能作为字典的键使用。

元组的创建

小括号创建

>>>a=(10,20,30)
>>>type(a)
<class 'tuple'>
>>>a=10,20,30
>>>type(a)
<class 'tuple'>
>>> a = (1)
>>> type(a)
<class 'int'>
>>> a = (1,) #或者 a = 1, >>> type(a)
<class 'tuple'>

tuple()创建元组

>>>b = tuple() #创建一个空元组对象
>>>b = tuple("abc")
>>>b = tuple(range(3))
>>>b = tuple([2,3,4])

元组的删除

del b#删除整个元组

元组的访问和计数

元组不能修改

用索引切片返回元组对象

>>> a = (20,10,30,9,8)
>>> a[1]
10
>>> a[1:3]
(10, 30)
>>> a[:4]
(20, 10, 30, 9)

sorted()

元组排序可用sorted(tupleObj),生成新的列表对象

>>> a = (20,10,30,9,8)
>>> sorted(a)
[8, 9, 10, 20, 30]

zip

zip(列表 1,列表 2,…)将多个列表对应位置的元素组合成为元组,并返回这个 zip 对象。

>>> a = [10,20,30]
>>> b = [40,50,60]
>>> c = [70,80,90]
>>> d = zip(a,b,c)#返回zip对象
>>> list(d)#进一步包装为list对象
[(10, 40, 70), (20, 50, 80), (30, 60, 90)]

生成器推导式创建元组

生成器推导式生成的是生成器对象,可以通过生成器对象转换成列表或者元组,也可以使用生成器对象的__next__()方法进行遍历。
元素访问结束之后必须重新创建该生成器对象。

>>> s = (x*2 for x in range(5))
>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
(0, 2, 4, 6, 8)
>>> list(s) #只能访问一次元素。第二次就为空了。需要再生成一次
[]
>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
()
>>> s = (x*2 for x in range(5))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4