组合数据类型之列表

本文详细介绍了如何在Python中创建列表,包括元组、range和字符串的转换。此外,讲解了列表元素的查找、读取、增加、删除方法,以及切片、索引、列表推导式的应用。还涵盖了列表的常用操作如排序、计数、成员检查,以及内置函数如max、min、sum和len的使用。
摘要由CSDN通过智能技术生成

目录

列表的创建

列表元素的查找

读取元素

读取位置

列表元素的增加

列表元素的删除

使用切片替换和修改列表中的元素

列表的其他常用方法及运算符

列表的常用内置函数


 列表

一个列表中的数据类型可以各不相同。

列表中每个数据称为元素。

所有元素用逗号隔开,并放在一对中括号"[]"中。

列表的创建

赋值运算符"="将一个列表赋值给变量即可创建列表对象。

a_list = ['1','2']    #创建一个列表,元素为'1','2'
b_list = []    #创建一个空列表
>>>list((1,2,3))    #将元组转换成列表
[1,2,3]

>>>list(range(1,10,2))    #将range对象转换成列表
[1,3,5,7,9]

>>>list('python')    #将字符串转换为列表
['p','y','t','h','o','n']

>>>list({'a':'1','b':'2','c':'3'})    #将字典的键转换为列表
['a','b','c']

>>>list({'a':'1','b':'2','c':'3'}.items())    #将字典的键值对转化为列表
[('a',1),('b',2),('c',3)]

列表推导式:list1 = [表达式 for 表达式1 in 序列 if 条件]    #针对序列中,满足条件的表达式1,做表达式

>>>aList = [-1,-4,6,7.5,9]
>>>[i*2 for i in aList if i>0]    #针对aList中的满足大于0的元素i做乘2
[12,15,18]

列表元素的查找

读取元素

索引:列表名[索引]

>>>a_list = [1,2,3]
>>>a_list[1]
2
>>>a_list[5]    #越界索引报错
IndexError:list index out of range

切片:列表名[开始索引,结束索引,步长]    #索引左闭右开

切片返回一个新列表,地址改变,越界索引不报错。通常在尾部截断或返回一个空列表。

>>>a_list = [1,2,3,4,5]
>>>a_list[1:3]    #左闭右开
[2,3]
>>>a_list[1:-1]    #索引从右往左从-1开始
[2,3,4]
>>>a_list[1:]    #end省略默认到尾部且包括尾部
[2,3,4,5]
>>>a_list[:3]    #start省略默认从起始开始
[1,2,3]
>>>a_list[:]    #end,start均省略输出列表
[1,2,3,4,5]
>>>a_list[::2]    #步长为2,省略为1
[1,3,5]
>>>a_list[3:10]    #越界索引不报错,从尾部阶段
[4,5]
>>>a_list[10,18]    #起始越界报错
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    a_list[10,18]
TypeError: list indices must be integers or slices, not tuple

读取位置

使用index()函数可以获取指定元素首次出现的下标。

一般形式:index(value,[,start=0,[,end=len(seq)]])    #等号后面为默认值,start省略为起始,end省略为尾部。

>>>a_list = ["a","b","c","d","c"]    
>>>a_list.index("c")    #元素"c"首次出现的索引
2
>>>a_list.index("c",3)    #起始位置3
4
>>>a_list.index("c",0,2)    #指定范围内无"c",报错
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    a_list.index("c",0,2)
ValueError: 'c' is not in list

列表元素的增加

append()函数用于向列表尾部追加一个元素。

>>>a_list = [1,2,3]
>>>a_list.append(4)
>>>a_list
[1,2,3,4]

也常用append()与循环结构创建列表:

先list1=[] ,再for循环中执行list1.append(元素) 

insert()方法用于向列表任意指定位置插入一个元素。

一般形式:list.insert(索引,插入对象)

>>>a_list = [1,2,3]
>>>a_list.insert(0,0)
>>>a_list
[0,1,2,3]

extend()函数用于将另一个列表中的所有元素追加到当前列表的尾部。

>>>a_list = [1,2,3]
>>>a_list.extend([4,5,6])
>>>a_list
[1,2,3,4,5,6]

以上三种方法均属于原地操作,不影响对象在内存中的起始地址。

使用"+"连接运算符将一个新列表的元素添加在列表的尾部但不属于原地操作,而是返回一个新列表,涉及大量元素的复制,效率低下。

>>> a_list = [1,2,3]
>>> id(a_list)
2904542657216
>>> a_list = a_list + [4]    #连接两个列表
>>> a_list
[1, 2, 3, 4]
>>> id(a_list)    #地址发生改变
2904542838080

使用"+="实现列表追加元素属于原地操作,和append()方法一样高效。

>>> a_list = [1,2,3]
>>> id(a_list)
2904542838080
>>> a_list += [4]    #连接两个列表
>>> a_list
[1, 2, 3, 4]
>>> id(a_list)    #地址不发生改变
2904542838080

同样的,"*"重复运算符可以用与列表和整数相乘,表示序列重复,返回新列表。运算符"*="属于本地操作。

>>>a_list = [1,2,3,4,5]
>>> id(a_list)
2904542838080
>>> a_list = a_list * 2    #使用"="重复运算符
>>> a_list
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> id(a_list)    #地址发生改变
2904510956864
>>> a_list *= 2    #使用"*="重复运算符
>>> a_list
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> id(a_list)    #地址不发生改变
2904510956864

使用切片为列表增加元素

可以使用切片操作在列表任意位置插入新元素,属于原地操作。

列表名称[起始索引,结束索引] = [插入的元素]

>>>a_list = [1,2,3]
>>>a_list[len(a_list):] = [4]    #在列表尾部增加新元素
>>>a_list
[1,2,3,4]
>>>a_list[:0] = [0]    #在列表头部增加新元素
>>>a_list
[0,1,2,3,4]
>>>a_list[3:3] = [6]   #在列表指定位置增加新元素
>>>a_list
[0,1,2,6,3,4]

列表元素的删除

用del命名删除列表中指定的元素或整个列表,属于原地操作。

>>> a_list = [1,2,3]
>>> del a_list[0]    #删除指定位置的元素
>>> a_list
[2, 3]
>>> del a_list    #删除整个列表
>>> a_list    #已删除列表,所以输出列表的操作将报错
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    a_list
NameError: name 'a_list' is not defined

pop()函数用于删除并返回指定位置index(默认最后一个)上的元素。

>>> a_list = [1,2,3]
>>> a_list.pop(1)    #删除指定位置的元素,并返回该元素的值
2
>>> a_list
[1, 3]
>>> a_list.pop()    #不指定元素默认最后一个
3
>>> a_list
[1]
>>> a_list.pop(1)   #index不是区间上的整数则报异常
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    a_list.pop(1)
IndexError: pop index out of range

remove(x)函数用于删除列表中第一个与指定值相同的元素,如列表中不存在与指定值相同的数则抛出异常。

>>> a_list = [1,3,2,3]
>>> a_list.remove(3)    #删除列表中第一个与指定值相同的元素
>>> a_list
[1, 2, 3]
>>> a_list.remove(4)    #若指定值不在列表中则抛出异常
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    a_list.remove(4)
ValueError: list.remove(x): x not in list

clear()函数用于清空列表中的元素。(不是删除列表)

>>> a_list = [1,2,3]
>>> a_list.clear()    #清空列表中的函数
>>> a_list
[]    #列表还存在,只是被清空成了空列表

使用切片替换和修改列表中的元素

列表名[起始索引,结束索引] = []

>>> a_list = [1,2,3,4,5]
>>> a_list[:4] = [9,8,7,6]   #替换列表元素,等号两边列表长度应相等
>>> a_list
[9, 8, 7, 6, 5]
>>> a_list[3:] = [7,8,988]    #切片连续(步长为1),等号两边长度可以不相等
>>> a_list
[9, 8, 7, 7, 8, 988]
>>> a_list[::2] = [1,1,1]    #切片不连续,等号两边长度必须相等
>>> a_list
[1, 8, 1, 7, 1, 988]
>>> a_list[::2] = [1]    #切片不连续,等号两边长度必须相等,不相等则报错
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    a_list[::2] = [1]
ValueError: attempt to assign sequence of size 1 to extended slice of size 3
>>> a_list[::2] = [0]*3    #隔一个修改一个
>>> a_list
[0, 8, 0, 7, 0, 988]
>>> a_list[::3] = ["a","b"]    #隔三个修改一个
>>> a_list
['a', 8, 0, 'b', 0, 988]

列表的其他常用方法及运算符

sort()函数用于按照指定规则对所有元素进行排序,默认升序。

需要降序则用sort(reverse=Ture)

reverse()函数用于对指定列表,把所有元素进行顺序反转。

以上方法都为原地操作。

>>> a_list = list(range(10))    #创建一个列表,列表由十个整数组成
>>> import random
>>> random.shuffle(a_list)    #把列表中的元素随机乱序
>>> a_list
[9, 5, 2, 0, 6, 7, 8, 1, 3, 4]
>>> a_list.sort()    #对元素进行排序,默认升序
>>> a_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a_list.sort(reverse=True)    #对元素进行逆序
>>> a_list
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a_list.reverse()    #对元素进行顺序反转
>>> a_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

使用count()函数统计列表中指定元素出现的次数。

>>> a_list = [1,2,3,4,5,5,5,5,5,5,5,55,5,5]
>>> a_list.count(5)     #统计指定元素出现的次数
9
>>> a_list.count(6)     #若指定元素不存在于列表中则返回0
0

使用in运算符测试列表中是否包含某个元素,返回True或False,查询时间随列表长度增加而线性增加。同样的操作对于集合而言是常数级的。

>>> a_list = [1,2,3]
>>> 3 in a_list    #测试列表中是否含有某个元素,含有返回True
True
>>> 4 in a_list    #测试列表中是否含有某个元素,不含有返回False
False
>>> 4 not in a_list
True
>>>3 not in a_list
False

列表的常用内置函数

max()、min()函数用于返回列表中所有元素中的最大值和最小值。

sum()函数用来返回列表中所有元素之和。

len()函数用来返回列表中元素的个数。

zip()函数用于将多个列表中元素重新组合为元组,并返回包含这些元组的zip对象。

enumerate()函数返回包含若干下标和值的迭代对象。***

map()函数把函数映射到列表的每个元素。

filter()函数根据指定函数的返回值对列表元素进行过滤。

all()函数用来测试列表中是否所有元素都等价于True。

any()函数用来测试列表中是否有等价与True的元素。

index(x)函数用来从列表中找出与x第一个匹配的索引,若不存在则抛出异常。

>>> a_list = list(range(10))    #生成一个列表,列表中有十个元素
>>> import random
>>> random.shuffle(a_list)    #将列表中的元素乱序
>>> a_list
[7, 6, 1, 4, 3, 9, 8, 5, 2, 0]
>>> all(a_list)    #测试是否所有元素都等价于True(即1)
False
>>> any(a_list)    #测试是否存在等价于True的元素
True
>>> max(a_list)    #返回最大值
9
>>> min(a_list)    #返回最小值
0
>>> sum(a_list)    #计算所有元素的和
45
>>> len(a_list)    #输出列表元素个数
10
>>> list(zip(a_list,[1]*10))    #列表元素重新组合成元组,并返回zip对象
[(7, 1), (6, 1), (1, 1), (4, 1), (3, 1), (9, 1), (8, 1), (5, 1), (2, 1), (0, 1)]
>>> list(zip(range(1,4)))    #zip()函数也可用于一个序列或迭代对象,且以短的序列为准
[(1,), (2,), (3,)]
>>> enumerate(a_list)    #枚举列表元素,返回enumerate对象
<enumerate object at 0x0000018FDC77F8C0>
>>> list(enumerate(a_list))    #enumerate对象可转换为列表、元组、集合,返回索引号跟值
[(0, 7), (1, 6), (2, 1), (3, 4), (4, 3), (5, 9), (6, 8), (7, 5), (8, 2), (9, 0)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值