python 列表使用增删改查各项功能
定义列表
names = ["a","b","c","d","e","f","g"] #给列表赋值,用中括号【】表示列表,无内容时为空,打印结果就是【】
print(names) #打印输出结果:[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘]
根据列表的下标号去取得表中的数值,所取数值在列表中所处第几位就是其下标号,计算机第一位从0开始计算,从左向右数
在列表中取值也叫 “切片”
print(names[0]) #利用下标号取第一位置数值,输出结果:a
print(names[0],names[2]) #利用下标号取第一,三位置数值,输出结果:a c
print(names[0:4]) #利用下标号取第一到第四位置前四个数值,输出结果:a b c d,取数值顾头不顾尾,所以取0123位置数值,下标4第五位置数值忽略,所以这种办法无法取最后一位数值
print(names[-1]) #利用下标号取最后一位置数值,方向从右向左数就为-1,输出结果:g
print(names[-3:]) #利用下标号取最后三位数值,不知道具体个数情况下取最后三位只能用-3,-2,-1来代替,而计算机是从左向右数,所以书写为【-3:-1】,但因为其留头去尾特性会舍弃最后的-1位数值,所以改为【-3:】,输出结果:e f g
和上一句原理相同print(names[0:4]) 可以等价于print(names[:4])
向已有列表中追加数值
names.append("h") #往列表中追加数值,默认从最后依次追加,并且每次只能追加一个数值
print(names) #输出结果:[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘]
names.insert(1,"i") #利用下标号把数值i插入第二位置,下标号为1
print(names) #输出结果:[‘a‘, ‘i‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘]
names[1] = "j" #给固定位置数值重新赋值
print(names) #输出结果:[‘a‘, ‘j‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘]
删除表中数值方法三种:
names.remove("b") #直接用数值自身删除
print(names) #输出结果:[‘a‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘]
del names[3] #利用下标号删除
print(names) #输出结果:[‘a‘, ‘b‘, ‘c‘, ‘e‘, ‘f‘, ‘g‘]
names.pop(5) #不输入下标号默认删除最后一个位置,输入则删除对应位置数值
print(names) #输出结果:[‘a‘, ‘b‘, ‘c‘, ‘e‘, ‘g‘, ‘h‘]
根据数值本身查询下标号
print(names.index("e")) #上传数据本身查询下标号,输出结果: 4
print(names[names.index("e")])
统计列表中同名数值
names = ["a","b","c","d","e","f","g","d"] #给列表赋值
print(names.count("d")) #利用列表统计同名数值d,输出结果:2
列表清空
names.clear() #清空列表,之后打印输出结果为空[]
列表内数值排序反转
names.reverse() #反转列表排序 print(names) #输出结果:[‘d‘, ‘g‘, ‘f‘, ‘e‘, ‘d‘, ‘c‘, ‘b‘, ‘a‘]
列表数值依据优先级排序
names.sort() #将列表中数值依据ASCII码表里面首字母的优先级排序,特殊符号最优先,然后数字,然后大写字母,最后小写字母
列表扩展功能
names = ["a","b","c","d","e","f","g","d"]
names2 =[1,2,3,4,5]
names.extend(names2) #扩展功能,把names2表中的内容增加到names中,且names2仍然会存在
print(names) 输出结果:[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘d‘, 1, 2, 3, 4, 5]
列表浅复制
names = ["a","b","c","d","e",["A","B","C"],"f","g","d"] #定义列表names,且第六位置下标5位另一张子列表
names2 = names.copy() #定义列表names2,复制names
names[1] = "B" #names下标1第二位置换成大写B
names[5][0] = "a" #names下标5第六位置子列表里下标0第一位置换成小写a
print(names)
print(names2)
输出结果:
[‘a‘, ‘B‘, ‘c‘, ‘d‘, ‘e‘, [‘a‘, ‘B‘, ‘C‘], ‘f‘, ‘g‘, ‘d‘]
[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, [‘a‘, ‘B‘, ‘C‘], ‘f‘, ‘g‘, ‘d‘]
结论:names.copy()为浅复制,第一层数值完全复制,names得下标1位置改为大写B后,names2仍然保留为小写b 但是第二层子列表保存的不是数值,而是一个指针,指向内存中子列表存放位置,所以两张表中子列表变化完全一致, 即修改name2子列表中数值,names子列表也会随之改变
实现浅复制三种方式:
import copy person = [‘name‘,[‘a‘,100]]
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
浅复制使用可以用于创建联合账号,如两张表第一层所属人不同,但子列表中数值可以同步变化
import copy
person = [‘name‘,[‘deposit‘,100]] #姓名 (薪水,金额)
p1 = person[:]
p2 = person[:]
p1[0] = ‘xuejianing‘
p2[0] = ‘hexu‘
p2[1][1] = 50
print(p1)
print(p2)
得到输出结果:姓名不同,但是子列表里存款金完全同步
[‘xuejianing‘, [‘deposit‘, 50]]
[‘hexu‘, [‘deposit‘, 50]]
如果要完全复制需要引用库做强复制
import copy #引用模块
names = ["a","b","c","d","e",["A","B","C"],"f","g","d"] #定义列表names,且第六位置下标5位另一张子列表
names2 = copy.deepy(names) #强复制
这样names,names2就是两张完全独立的表,一般不建议这么做,类似linux中的硬链接文件
补充:列表间隔打印
names = ["a","b","c","d","e",["A","B","C"],"f","g","d"]
print(names[0:-1:2]) #从第一个数自到最后一个数字,步长2,间隔打印
输出结果:[‘a‘, ‘c‘, ‘e‘, ‘f‘, ‘d‘] 该语句可简化为 print(names[::2])
元组tuple,也是一种列表,但是创建完成后就只能查询和切片,也叫只读列表
定义元组names = (‘a‘,‘b‘,‘c‘)
参数只有names.count和names.index