关于Python列表的操作
Python列表是线性表的一种表示方式。Python列表中所存储元素的具体含义,在不同的情况下可以不同,它可以是一个数,也可以是字符串,甚至是更复杂的信息。它可以存储Python的标准类型,也可以存储自定义的数据结构及对象。Python对列表也提供了非常便捷的操作,列表可以执行pop、sort、append、remove等操作,也可以合并其它列表,或者将列表切片(切分出子列表)。
1.创建列表
列表是一个有序的,可修改的,元素以逗号分隔的,用中括号包围的序列。
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
#打印输出列表
print(name0)
print(name1)
print(name2)
print(name3)
print(name4)
输出结果:
[1, 3, 4, 2, 6, 5, 0]
[‘卢阿涛’, ‘张三’, ‘李四’, ‘王五’]
[1.2, 3.2, 55.3, 0.2]
[2, ‘卢阿涛’, 1.3, True]
[2, ‘lu’, [1, 2, 3, ‘你好’], 3, [3, 1.2]]
2.访问列表
Python语言中访问列表数据,可以直接使用下标索引访问列表中的单个数据项,也可以使用截取运算符访问子列表。下标范围从0到列表长度减1。
Temp = m[n] 获取m列表的第n+1个位置处的元素
访问列表的单个数据项
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
#访问第一个元素和第三个元素
print('%d %d' % (name0[0],name0[2]))
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
#访问第一个元素和第三个元素
print("第一个元素的值:"+ name1[0] +" "+ "第二个元素的值:"+ name1[2])
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
#访问第一个元素和第三个元素
print('%.2f,%.2f' %(name2[0],name2[2]))
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
#访问第一个元素和第三个元素
print('%d,%.2f'%(name3[0],name3[2]))
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
#访问第一个元素和第三个元素
print('%d' % (name4[0]))
print(name4[2])
输出结果:
1 4
第一个元素的值:卢阿涛 第二个元素的值:李四
1.20,55.30
2,1.30
2
[1, 2, 3, ‘你好’]
在Python语言中,print不能直接输出浮点、整数等数值类型。用print输出数值类型时,需要使用格式化运算符。当访问嵌套列表元素时,需要使用多个下标进行访问。
访问列表中的子列表
访问列表中的子表可以用“[:]”运算符. List[start:end] start是其实索引,end是终止索引,该运算符访问包括start在内到end(不包括end)范围内的列表元素,返回值仍然是一个列表。
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
#访问第一个元素到第三个元素
print(name0[:3])#print(name0[0:4])
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
#访问第二个元素到第三个元素
print(name1[1:3])
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
#访问第三个元素到第最后一个元素
print(name2[2:])#print(name2[2:4])
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
#访问第二个元素到第三个元素
print(name3[1:3])
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
#访问第二个元素到第四个元素
print(name4[1:4])
输出结果:
[1, 3, 4]
[‘张三’, ‘李四’]
[55.3, 0.2]
[‘卢阿涛’, 1.3]
[‘lu’, [1, 2, 3, ‘你好’], 3]
3.添加元素
向python列表里面添加元素主要有三种方法:
方法 | 描述 |
---|---|
append() | 在列表的尾部添加一个元素,一次只能添加一个 |
extend() | 在列表的尾部添加一个列表 |
insert() | 在列表的特定位置添加元素,特定位置是元素在列表中的位置索引号 |
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
name0.append(8) #在末尾添加一个8
name0.extend([2,4,6]) #在末尾添加2,4,6
name0.insert(1,8) #在第2个位置添加一个8
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
name1.append("赵柳") #在末尾添加一个赵柳
name1.extend(["a","b","c"])#在末尾添加a,b,c
name1.insert(1,'A')#在第2个位置添加一个A
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
name2.append(8.8) #在末尾添加一个8.8
name2.extend([2.8,4.8,6.8])#在末尾添加2.8,4.8,6.8
name2.insert(1,8.8)#在第2个位置添加一个8.8
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
name3.append(8) #在末尾添加一个8
name3.extend([2,4,6])#在末尾添加2,4,6
name3.insert(1,8)#在第2个位置添加一个8
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
name4.append(8) #在末尾添加一个8
name4.extend([[2,4,6]])#在末尾添加2,4,6
name4.insert(1,8)#在第2个位置添加一个8
#打印输出列表
print(name0)
print(name1)
print(name2)
print(name3)
print(name4)
输出结果:
[1, 8, 3, 4, 2, 6, 5, 0, 8, 2, 4, 6]
[‘卢阿涛’, ‘A’, ‘张三’, ‘李四’, ‘王五’, ‘赵柳’, ‘a’, ‘b’, ‘c’]
[1.2, 8.8, 3.2, 55.3, 0.2, 8.8, 2.8, 4.8, 6.8]
[2, 8, ‘卢阿涛’, 1.3, True, 8, 2, 4, 6]
[2, 8, ‘lu’, [1, 2, 3, ‘你好’], 3, [3, 1.2], 8, [2, 4, 6]]
4.删除元素
python列表的删除列表里面的一些元素也有三种方法:
方法 | 描述 |
---|---|
remove() | 从左往右删除一个指定的元素 |
Del | 删除掉列表里面的索引号位置为n 的元素或整个列表,del是Python内置功能,不是列表独有 |
pop() | 将列表的最后一个元素返回,并在此基础上删除 ,返回值是列表最后一个元素 |
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
name0.remove(3) #删除值为3的从左到右的第一个元素
del name0[2] #删除第3个位置元素
temp = name0.pop() #删除最后一个元素,并返回最后一个元素的值
print("返回的值是:")
print(temp)
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
name1.remove("张三") #删除值为张三的从左到右的第一个元素
del name1[2] #删除第3个位置元素
temp = name1.pop() #删除最后一个元素,并返回最后一个元素的值
print("返回的值是:")
print(temp)
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
name2.remove(3.2) #删除值为3.2的从左到右的第一个元素
del name2[2] #删除第3个位置元素
temp = name2.pop() #删除最后一个元素,并返回最后一个元素的值
print("返回的值是:")
print(temp)
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
name3.remove(True) #删除值为True的从左到右的第一个元素
del name3[2] #删除第3个位置元素
temp = name3.pop() #删除最后一个元素,并返回最后一个元素的值
print("返回的值是:")
print(temp)
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
name4.remove([3,1.2]) #删除值为[3,1,2]的从左到右的第一个元素
del name4[2] #删除第3个位置元素
temp = name4.pop() #删除最后一个元素,并返回最后一个元素的值
print("返回的值是:")
print(temp)
#打印输出列表
print(name0)
print(name1)
print(name2)
print(name3)
print(name4)
输出结果:
返回的值是:
0
返回的值是:
李四
返回的值是:
55.3
返回的值是:
卢阿涛
返回的值是:
3
[1, 4, 6, 5]
[‘卢阿涛’]
[1.2]
[2]
[2, ‘lu’]
5.修改元素的值
修改列表元素可以采用访问列表元素的方法,在赋值运算符(=)左边使用访问运算符可以更新单个数据项或多个数据项.
#存储整形的列表
name0 = [1,3,4,2,6,5,0]
name0[0] = 8 #将第一个位置的值改为8
name0[1:3] = [5,9]#将第二个位置到第三个位置的值分别改为5,9
#存储字符串类型的列表
name1 = ['卢阿涛','张三','李四','王五']
name1[0] = 'luatao' #将第一个位置的值改为luatao
name1[1:3] = ['zhangsan','lisi']#将第二个位置到第三个位置的值分别改为zhangsan,lisi
#存储浮点类型的列表
name2 = [1.2,3.2,55.3,0.2]
name2[0] = 8.8 #将第一个位置的值改为8.8
name2[1:3] = [5.8,9.8]#将第二个位置到第三个位置的值分别改为5.8,9.8
#存储不同数据类型的列表
name3 = [2,'卢阿涛',1.3,True]
name3[0] = 8 #将第一个位置的值改为8
name3[1:3] = [2.3,'luatao']#将第二个位置到第三个位置的值分别改为2.3,'luatao'
#存储嵌套类型的列表
name4 = [2,'lu',[1,2,3,'你好'],3,[3,1.2]]
name4[0] = [2,3,4] #将第一个位置的值改为[2,3,4]
name4[1:3] = [5,'nihao'] #将第二个位置到第三个位置的值分别改为5,nihao
#打印输出列表
print(name0)
print(name1)
print(name2)
print(name3)
print(name4)
输出结果:
[8, 5, 9, 2, 6, 5, 0]
[‘luatao’, ‘zhangsan’, ‘lisi’, ‘王五’]
[8.8, 5.8, 9.8, 0.2]
[8, 2.3, ‘luatao’, True]
[[2, 3, 4], 5, ‘nihao’, 3, [3, 1.2]]
6.查找元素的值
列表没有find方法 但有三种基本查找方法:
方法 | 描述 |
---|---|
Count | 计数,返回要计数的元素在列表中出现的次数 |
Index | 查找,从左往右返回查找到的第一个指定元素的索引号,如果没有找到,报错 |
In | 查找元素是够在列表中,在输出true,不在输出false |
#存储整形的列表
name0 = [1,3,4,2,6,5,0,3,2]
temp = name0.count(2)#计算2在列表中出现的次数
print("2在列表中出现的次数:" ,temp)
print("2出现的下标:",name0.index(2))# 从左到右第一次出现2的下标
print("2在4到9之间第一次出现的下标:",name0.index(2,4,9))#在区间索引号4到9(不包含9)的第一次出现值为2的索引号
print(3 in name0)#判断3在name0列表里
print(3 not in name0)#判断3不在name0列表里
输出结果:
2在列表中出现的次数: 2
2出现的下标: 3
2在4到9之间第一次出现的下标: 8
True
False
7.排序
Python提供了列表的内置函数sort方法和通用函数sorted方法对列表进行排序。
方法 | 描述 |
---|---|
sort(key=None, reverse=False) | 其默认排序规则是,如果列表中的元素都是数字,按照从小到大升序排序;如果元素都是字符串,则会按照字符表顺序升序排序 |
sorted | 方法是Python语言提供的适用于可迭代数据类型的排序方法。使用方法和list的sort方法相同,唯一不同的是sorted方法不改变原列表元素的顺序,而是返回一个排序后的列表。 |
reverse() | 列表反转 第一个变为最后一个,最后一个变为第一个 |
#存储整形的列表
name0 = [1,3,4,2,6,5,0,3,2]
print('原来的列表:',name0)
name0.sort()#按从小到大排序
print("排序后的列表:",name0)
name0.reverse()#对列表翻转
print('翻转后的列表:',name0)
#存储字符串类型的列表
name1 = ['have','you','love','i']
name1.sort(reverse = True)#直接降序排序
print('降序后的列表:',name1)
print()#换行
name2 = [3,2,4,5,7,2,2]
print('初始列表:',name2)
temp = sorted(name2)#按从小到大排序,不改变原来列表的位置
print('原来列表的:',name2)
print('返回的列表:',temp)
输出结果:
原来的列表: [1, 3, 4, 2, 6, 5, 0, 3, 2]
排序后的列表: [0, 1, 2, 2, 3, 3, 4, 5, 6]
翻转后的列表: [6, 5, 4, 3, 3, 2, 2, 1, 0]
降序后的列表: [‘you’, ‘love’, ‘i’, ‘have’]
初始列表: [3, 2, 4, 5, 7, 2, 2]
原来列表的: [3, 2, 4, 5, 7, 2, 2]
返回的列表: [2, 2, 2, 3, 4, 5, 7]
8.遍历列表
三种遍历方法:
#存储字符串类型的列表
name0 = ['have','you','love','i']
#列表迭代遍历
print('第一种遍历方法:利用迭代遍历')
for i in name0:
print("序号:%s 值:%s" %(name0.index(i)+1,i))
#列表索引遍历
print('第二种遍历方法:利用索引遍历')
for i in range(len(name0)):
print("序号:%s 值:%s" % (i + 1,name0[i]))
#应用枚举方式遍历
print('第三种遍历方法:利用枚举方法遍历')
for i ,st in enumerate(name0):
print("序号:%s 值:%s" % (i + 1,st))
输出结果:
第一种遍历方法:利用迭代遍历
序号:1 值:have
序号:2 值:you
序号:3 值:love
序号:4 值:i
第二种遍历方法:利用索引遍历
序号:1 值:have
序号:2 值:you
序号:3 值:love
序号:4 值:i
第三种遍历方法:利用枚举方法遍历
序号:1 值:have
序号:2 值:you
序号:3 值:love
序号:4 值:i
9.常用的列表操作符
符号 | 描述 |
---|---|
+ | 主要实现的是多个列表之间的拼接 |
* | 主要实现的是列表的赋值和添加 |
>,< | 主要进行数据类型列表的元素的比较 |
and等 | 逻辑运算符,可以进行列表之间的逻辑判断 |
m = [1,2,3,4]
n = [5,6,7,8,9]
c = m + n #实现两个列表的合并
print("+之后列表c:",c)
m*=3 #实现对列表的扩充
print('*扩充后的列表',m)
print(m>n) #从左到右依次比较列表元素的大小
print(m<n and m>c)
输出结果:
+之后列表c: [1, 2, 3, 4, 5, 6, 7, 8, 9]
*扩充后的列表 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
False
False
10.列表的拷贝
对于python里面想要进行列表的复制,有两种
操作 | 描述 |
---|---|
1.深拷贝:n = m[:] | 对列表进行完全复制,如果改变m的值,n不受影响 |
2.浅拷贝 n = m | 对列表名起一个别名,如果改变m的值,n会发生变化 |
m = [1,2,3,4]
print('浅拷贝')
print('初始化m的值:',m)
n = m #对m进行浅拷贝
print('拷贝的n的值:',n)
m[1] = 1#改变m的值
print('改变后m的值:',m)
print('改变后n的值:',n)
print()#换行
m = [1,2,3,4]
print('深拷贝')
print('初始化m的值:',m)
n = m[:] #对m进行深拷贝
print('拷贝的n的值:',n)
m[1] = 1#改变m的值
print('改变后m的值:',m)
print('改变后n的值:',n)
print()#换行
输出结果:
浅拷贝
初始化m的值: [1, 2, 3, 4]
拷贝的n的值: [1, 2, 3, 4]
改变后m的值: [1, 1, 3, 4]
改变后n的值: [1, 1, 3, 4]
深拷贝
初始化m的值: [1, 2, 3, 4]
拷贝的n的值: [1, 2, 3, 4]
改变后m的值: [1, 1, 3, 4]
改变后n的值: [1, 2, 3, 4]
本来只是打算整理一下所学的知识,没有想到一个列表就整理了这么多的知识点,也耗费了我不少的时间(用了一上午)。不过我认为还是值得了,起码这些知识我都牢牢的记住了,一段时间内是不会忘了。加油!