什么是网站内链,专业简章,wordpress导航添加登录退出,免费动画制作网站标题 列表什么是列表列表的创建列表的删除列表的访问 列表的常用方法append()、insert()、extend()pop()、remove()、clear()count()、index()list()、 filter()、 reduce()、lambda() 列表支持的运算加法运算符乘法运算符*成员测试运算符in 内置函数对列表的操作列表推导式列表… 标题 列表什么是列表列表的创建列表的删除列表的访问 列表的常用方法append()、insert()、extend()pop()、remove()、clear()count()、index()list()、 filter()、 reduce()、lambda() 列表支持的运算加法运算符乘法运算符*成员测试运算符in 内置函数对列表的操作列表推导式列表输入元素 切片操作1使用切片获取列表部分元素2使用切片为列表增加元素3使用切片替换和修改列表中的元素4使用切片删除列表中的元素 列表 什么是列表
列表list是包含若干元素的有序连续内存空间。当列表增加或删除元素时列表对象自动进行内存的扩展或收缩从而保证相邻元素之间没有缝隙。
在Python中同一个列表中元素的数据类型可以各不相同可以同时包含整数、实数、字符串等基本类型的元素也可以包含列表、元组、字典、集合、函数以及其他任意对象。
例如 [‘spam’, 2.0, 5, [10, 20]] [[‘file1’, 200,7], [‘file2’, 260,9]] [{3}, {5:6}, (1, 2, 3)]
列表的创建
使用“”直接将一个列表赋值给变量即可创建列表对象
使用list()函数把元组、range对象、字符串、字典、集合或其他可迭代对象转换为列表。 list((3,5,7,9,11)) #将元组转换为列表
[3, 5, 7, 9, 11]list(range(1, 10, 2)) #将range对象转换为列表
[1, 3, 5, 7, 9]list(hello world) #将字符串转换为列表
[h, e, l, l, o, , w, o, r, l, d]list({3,7,5}) #将集合转换为列表
[3, 5, 7]list({a:3, b:9, c:78}) #将字典的“键”转换为列表
[a, c, b]list({a:3, b:9, c:78}.items())#将字典的“键:值”对转换为列表
[(b, 9), (c, 78), (a, 3)]x list() #创建空列表列表的删除
使用del命令将其删除这一点适用于所有类型的Python对象。 x [1, 2, 3]del x #删除列表对象x #对象删除后无法再访问抛出异常
NameError: name x is not defined列表的访问
访问列表时0表示第1个元素1表示第2个元素2表示第3个元素以此类推列表还支持使用负整数作为下标其中-1表示最后1个元素-2表示倒数第2个元素-3表示倒数第3个元素以此类推。 x list(Python) #创建类别对象x
[P, y, t, h, o, n]x[0] #下标为0的元素第一个元素
Px[-1] #下标为-1的元素最后一个元素
n列表的常用方法 append()、insert()、extend()
append()用于向列表尾部追加一个元素insert()用于向列表任意指定位置插入一个元素extend()用于将另一个列表中的所有元素追加至当前列表的尾部。这3个方法都属于原地操作不影响列表对象在内存中的起始地址。 x [1, 2, 3]x.append(4) #在尾部追加元素x.insert(0, 0) #在指定位置插入元素x.extend([5, 6, 7]) #在尾部追加多个元素pop()、remove()、clear()
pop()用于删除并返回指定位置默认是最后一个上的元素remove()用于删除列表中第一个值与指定值相等的元素clear()用于清空列表中的所有元素。这3个方法也属于原地操作。 另外还可以使用del命令删除列表中指定位置的元素同样也属于原地操作。 x [1, 2, 3, 4, 5, 6, 7]x.pop() #弹出并返回尾部元素
7x.pop(0) #弹出并返回指定位置的元素
1x.clear() #删除所有元素x
[]x [1, 2, 1, 1, 2]x.remove(2) #删除首个值为2的元素del x[3] #删除指定位置上的元素x
[1, 1, 1]count()、index()
count()用于返回列表中指定元素出现的次数index()用于返回指定元素在列表中首次出现的位置 x [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]x.count(3) #元素3在列表x中的出现次数
3x.count(5) #不存在返回0
0x.index(2) #元素2在列表x中首次出现的索引
1x.index(5) #列表x中没有5抛出异常
ValueError: 5 is not in listlist()、 filter()、 reduce()、lambda()
list 函数list 函数用于将一个可迭代对象如元组或字符串转换为列表。例如可以使用 list 函数将元组转换为列表
my_tuple (1, 2, 3)
my_list list(my_tuple)
print(my_list) # 输出: [1, 2, 3]filter 函数filter 函数用于根据指定条件筛选出满足条件的元素并返回一个可迭代对象。它接受两个参数一个是函数用于判断条件另一个是可迭代对象。例如下面的代码使用 filter 函数从列表中筛选出偶数
my_list [1, 2, 3, 4, 5, 6]
filtered_list list(filter(lambda x: x % 2 0, my_list))
print(filtered_list) # 输出: [2, 4, 6]在上面的例子中lambda x: x % 2 0 是一个匿名函数用于判断元素是否为偶数。
lambda 函数lambda 函数也称为匿名函数它是一种定义简单函数的方式不需要使用 def 关键字来定义函数。lambda 函数通常在需要一个简单的函数但不想定义具名函数的情况下使用。例如下面的代码定义了一个简单的 lambda 函数用于计算两个数的和
add_numbers lambda x, y: x y
result add_numbers(3, 4)
print(result) # 输出: 7reduce 函数reduce 函数位于 functools 模块中用于将一个二元操作函数应用于序列的前两个元素然后将结果与下一个元素再次应用该函数直到处理完整个序列并返回最终结果。
from functools import reducesequence [1, 2, 3, 4, 5]
result reduce(lambda x, y: x y, sequence)
print(result) # 输出15在上述示例中我们使用 reduce 函数对序列 [1, 2, 3, 4, 5] 执行了累加操作。lambda x, y: x y 是一个匿名函数它接收两个参数 x 和 y 并返回它们的和。reduce(lambda x, y: x y, sequence) 将这个匿名函数应用于序列中的所有元素并返回累加的结果。
列表支持的运算
加法运算符
可以实现列表增加元素的目的但不属于原地操作而是返回新列表涉及大量元素的复制效率非常低。使用复合赋值运算符实现列表追加元素时属于原地操作与append()方法一样高效。 x [1, 2, 3]id(x)
53868168x x [4] #连接两个列表x
[1, 2, 3, 4]id(x) #内存地址发生改变
53875720x [5] #为列表追加元素x
[1, 2, 3, 4, 5]id(x) #内存地址不变
53875720乘法运算符*
用于列表和整数相乘表示序列重复返回新列表。运算符*也可以用于列表元素重复属于原地操作 x [1, 2, 3, 4]id(x)
54497224x x * 2 #元素重复返回新列表x
[1, 2, 3, 4, 1, 2, 3, 4]id(x) #地址发生改变
54603912x * 2 #元素重复原地进行x
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]id(x) #地址不变
54603912成员测试运算符in
用于测试列表中是否包含某个元素查询时间随着列表长度的增加而线性增加而同样的操作对于集合而言则是常数级的。 3 in [1, 2, 3]
True3 in [1, 2, 3]
False内置函数对列表的操作
max()、min()函数用于返回列表中所有元素的最大值和最小值 sum()函数用于返回列表中所有元素之和 len()函数用于返回列表中元素个数 zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的zip对象 enumerate()函数返回包含若干下标和值的迭代对象 map()函数把函数映射到列表上的每个元素 filter()函数根据指定函数的返回值对列表元素进行过滤 all()函数用来测试列表中是否所有元素都等价于True any()用来测试列表中是否有等价于True的元素
标准库functools中的reduce()函数以及标准库itertools中的compress()、groupby()、dropwhile()等大量函数也可以对列表进行操作 x list(range(11)) #生成列表import randomrandom.shuffle(x) #打乱列表中元素顺序x
[0, 6, 10, 9, 8, 7, 4, 5, 2, 1, 3]all(x) #测试是否所有元素都等价于True
Falseany(x) #测试是否存在等价于True的元素
Truemax(x) #返回最大值
10max(x, keystr) #按指定规则返回最大值
9min(x)
0sum(x) #所有元素之和
55len(x) #列表元素个数
11list(zip(x, [1]*11)) #多列表元素重新组合
[(0, 1), (6, 1), (10, 1), (9, 1), (8, 1), (7, 1), (4, 1), (5, 1), (2, 1), (1, 1), (3, 1)]list(zip(range(1,4))) #zip()函数也可以用于一个序列或迭代对象
[(1,), (2,), (3,)]list(zip([a, b, c], [1, 2])) #如果两个列表不等长以短的为准
[(a, 1), (b, 2)]enumerate(x) #枚举列表元素返回enumerate对象
enumerate object at 0x00000000030A9120list(enumerate(x)) #enumerate对象可以转换为列表、元组、集合
[(0, 0), (1, 6), (2, 10), (3, 9), (4, 8), (5, 7), (6, 4), (7, 5), (8, 2), (9, 1), (10, 3)]列表推导式
列表推导式使用非常简洁的方式来快速生成满足特定需求的列表代码具有非常强的可读性。 列表推导式语法形式为 [expression for expr1 in sequence1 if condition1 for expr2 in sequence2 if condition2 for expr3 in sequence3 if condition3 … for exprN in sequenceN if conditionN]
列表推导式在逻辑上等价于一个循环语句只是形式上更加简洁。例如 aList [x*x for x in range(10)]
# 相当于aList []for x in range(10):aList.append(x*x)freshfruit [ banana, loganberry , passion fruit ]aList [w.strip() for w in freshfruit]
# 等价于下面的代码aList []for item in freshfruit:aList.append(item.strip())
列表输入元素
eval是Python的一个内置函数功能十分强大这个函数的作用是返回传入字符串的表达式的结果。就是说将字符串当成有效的表达式 来求值 并 返回计算结果。 eval函数就是实现list、dict、tuple与str之间的转化同样str函数把listdicttuple转为为字符串 ainput()
itema.split( ) # 使用字符串的split()方法将字符串a按照空格进行分割得到一个包含多个子串的列表
list[eval(x) for x in item] # 使用列表推导式遍历列表item中的每个子串并将其转换为对应的数字
print(list)切片操作
在形式上切片使用2个冒号分隔的3个数字来完成。 [start: end :step]
第一个数字start表示切片开始位置默认为0 第二个数字end表示切片截止但不包含位置默认为列表长度 第三个数字step表示切片的步长默认为1。 当start为0时可以省略当end为列表长度时可以省略当step为1时可以省略省略步长时还可以同时省略最后一个冒号。 当step为负整数时表示反向切片这时start应该在end的右侧才行
1使用切片获取列表部分元素
使用切片可以返回列表中部分元素组成的新列表。与使用索引作为下标访问列表元素的方法不同切片操作不会因为下标越界而抛出异常而是简单地在列表尾部截断或者返回一个空列表代码具有更强的健壮性。 aList [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]aList[::] #返回包含原列表中所有元素的新列表
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]aList[::-1] #返回包含原列表中所有元素的逆序列表
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]aList[::2] #隔一个取一个获取偶数位置的元素
[3, 5, 7, 11, 15]aList[1::2] #隔一个取一个获取奇数位置的元素
[4, 6, 9, 13, 17]aList[3:6] #指定切片的开始和结束位置
[6, 7, 9]aList[0:100] #切片结束位置大于列表长度时从列表尾部截断
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]aList[100] #抛出异常不允许越界访问
IndexError: list index out of range2使用切片为列表增加元素
可以使用切片操作在列表任意位置插入新元素不影响列表对象的内存地址属于原地操作。 aList [3, 5, 7]aList[len(aList):]
[]aList[len(aList):] [9] #在列表尾部增加元素aList[:0] [1, 2] #在列表头部插入多个元素aList[3:3] [4] #在列表中间位置插入元素aList
[1, 2, 3, 4, 5, 7, 9]3使用切片替换和修改列表中的元素 aList [3, 5, 7, 9]aList[:3] [1, 2, 3] #替换列表元素等号两边的列表长度相等aList
[1, 2, 3, 9]aList[3:] [4, 5, 6] #切片连续等号两边的列表长度可以不相等aList
[1, 2, 3, 4, 5, 6]aList[::2] [0]*3 #隔一个修改一个aList
[0, 2, 0, 4, 0, 6]aList[::2] [a, b, c] #隔一个修改一个aList
[a, 2, b, 4, c, 6]4使用切片删除列表中的元素 aList [3, 5, 7, 9]aList[:3] [] #删除列表中前3个元素aList
[9]也可以结合使用del命令与切片结合来删除列表中的部分元素并且切片元素可以不连续。 aList [3, 5, 7, 9, 11]del aList[:3] #切片元素连续aList
[9, 11]aList [3, 5, 7, 9, 11]del aList[::2] #切片元素不连续隔一个删一个aList
[5, 9]