Python学习第6节—列表
列表
1.1列表定义
Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。
从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针.
1.2 创建列表
1.可使用赋值运算符“=”将一个列表赋值给变量
list_name=[element1,element2,...,elementn]
其中list_name为列表的名称,要避免和Python的内置函数重名。
2.使用list()函数创建列表
a = list('Python')
print(a)
# ['P','y','t','h','o','n']
a = ('Python',20)
b = list(a)
# 将元组转换成列表
print(b)
# ['Python','20']
1.3 删除列表
如果创建的列表不再使用时,可以用del语句将它删除(实际刚开始时,del语句不常用,因为Python自带的垃圾回收机制会自动销毁不用的列表)
a = ['q','w','e','r']
print(a)# ['q','w','e','r']
del a
print(a)
#Traceback (most recent call last):
File "D:/python第一节/venv/44.py", line 14, in <module>
print(a)
NameError: name 'a' is not defined
1.4 访问列表元素
列表的元素索引是从0开始,即第一个元素的索引是0,第二个索引为1,依次类推。
列表还支持索引值是负数,此类索引是从右向左计数,假设N个元素的化,就是从最后一个元素开始计数,从索引值-1开始,倒数第二个元素为-2,依次到第一个元素-(n-1)。
不能赋值列表中不存在的索引,否则会报错。
a = ['q','w','e']
print(a[0]) # q
print(a[2]) # e
print(a[-1])# e
print(a[-2])# w
print(a)# ['q','w','e']
1.5 序列切片
列表实现切片操作的语法规则
list_name[start????step]#区间是左闭右开的!
list_name:表示列表的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从列表的开头进行切片;
end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
a = ['q','w','e','r']
print(:2)# q w
print(::2)# q e
print(:)# ['q','w','e','r']
1.6 添加列表元素
1 使用"+"运算符将列表进行拼接
语法格式
list_name3 = list_name2 + list_name1
a = [1,2,3]
b = [4,5,6]
c = a + b
print(c)
#[1,2,3,4,5,6]
2 使用append()方法添加新元素
语法格式
list_name.append(obj)
a = [10, 20, -2]
#追加元素
a.append('30')
print(a)
# [10,20,-2,30]
b = (3,4)
# 追加元组,元组被当成一个元素
a.append(b)
print(a)
#[10,20,-2,30,(3,4)]
# 追加列表,列表被当成一个元素
a.append(['a', 'b'])
print(a)
#[10,20,-2,30,(3,4),['a','b']]
3 使用extend()方法添加元素
语法格式
list_name.extend(obj)
a = [10, 20, -2]
# 追加元素
a.append('30')
print(a)
# [10,20,-2,30]
b = (3,4)
# 追加元组里所有元素
a.append(b)
print(a)
#[10,20,-2,30,3,4]
# 追加列表里所有元素
a.append(['a', 'b'])
print(a)
#[10,20,-2,30,3,4,'a','b']
4 使用 insert() 在列表中插入元素
语法格式
list_name.insert(索引,obj)
a = [1,2,3]
a.insert(2,4)
print(a)
# [1,2,4,3]
a.insert(5,6)
print(a)
# [1,2,4,3,6]
1.7 删除列表元素
1 使用del语句指定元素删除
语法格式
del list_name[ ]和del list_name[start:end]
a = [10, 20, -2]
del a[0]
print(a)
# [20,-2]
a = [10, 20, -2]
del a[0:2]
print(a)
#[-2]
2 根据元素的值进行删除
语法格式
list_name.remove(obj)
lis = ['a', 'b', 'c','d']
lis.remove('d')
print(lis.remove('a'))# 返回值为:None
print(lis)# ['b','c']
lis.romve('e')# 如果列表中没有所删除的元素,则会报错
#ValueError: list.remove(x): x not in list
3 根据索引来进行删除的 默认弹出最后一个 传值的话 按照索引来进行弹出,一般弹出最后一个值
语法格式
弹出最后一个值 list_name.pop()
弹出特定索引所指的值 list_name.pop(obj)
a = ['w','r','d']
b = a.pop()
c = a.pop(0)
print(c)# w
print(b)# d
print(a)# ['r']
1.8 修改列表元素
1 对已有的元素通过索引值来修改特定元素
语法格式
list_name [ ]=
索引也可为负数
a = ['w','r','d']
a [0] = 'q'
a [-2] = 't'
print(a)
# ['q', 't', 'd']
a[3] = 'p'
print(a)
# IndexError: list assignment index out of range
# 对不存在的值进行修改时会报错,错误类型为索引错误
2 程序也可通过 slice 语法对列表其中一部分赋值。在执行这个操作时,并不要求新赋值的元素个数与原来的元素个数相等。这意味着通过这种方式既可为列表增加元素,也可为列表删除元素,
语法格式
list_name [start:end :step]= [一个或多个元素]
1 当参数中没step时
# 修改前两个元素
a = ['w','r','d']
a[0:2] = ['a','s']
print(a)
# ['a', 's', 'd']
# 修改第一个元素,并添加一个元素
a = ['w','r','d']
a[0:1] = [1,2]
print(a)
# [1, 2, 'r', 'd']
# 给索引为0的位置添加两个元素
a = ['w','r','d']
a[0:0] = [1,2]
print(a)
# [1, 2, 'w', 'r', 'd']
2 当参数中有step时,要求所赋值的列表元素个数与所替换的列表元素个数相等
a = ['w','r','d','y','u','i','o','p']
a[0:8:2] = [1,2,3,4]
# 从第一个数开始替换,指定step为2(索引差值为2),被被赋值的元素个数为4)
print(a)
# [1, 'r', 2, 'y', 3, 'i', 4, 'p']
1.9列表的内置方法
1 list_name.reverse() 反向列表中元素(自身排序)
2 list_name.sort(key = None,reserve = False) 对原列表进行排序
key 参数用于指定从每个元素中提取一个用于比较的键。例如,使用此方法时设置 key=str.lower 表示在排序时不区分字母大小写。 指定key为len,指定使用len函数对集合元素生成比较的键,也就是按字符串的长度比较大小
reverse 参数用于设置是否需要反转排序,默认 False 表示从小到大排序;如果将该参数设为 True,将会改为从大到小排序
3 list_name.sort(reverse=True) 对列表进行反向排序
4 list_name.copy() 复制列表(产生列表副本,与list[:]作用相同,改动元素时对原列表不造成影响)
5 list_name.clear() 清空列表,等于del lis[:]
6 list_name.count(obj) 统计某个元素在列表中出现的次数
7 list_name.len() 统计列表中元素个数
8 list_name.index() 方法用于定位某个元素在列表中出现的位置,如果该元素没有出现,则会引发 ValueError 错误,index() 方法还可传入 start、end 参数,用于在列表的指定范围内搜索元素。
语法格式
list_name.index(obj,start,end)
li = ['a', 'b', 'c', 'd','a']
print(li.count('a'))# 2
# 字典 {key:value} {name:juran}
for i in {'name':'juran','age':18}:
print(i)# name age
# key 键
li.extend({'name':'juran','age':18})
print(li)# ['a', 'b', 'c', 'd', 'a','name', 'age']
a_list = [2, 30, 'a', 'b', 30]
# 定位元素30的出现位置
print(a_list.index(30)) #1
# 从索引2处开始、定位元素30的出现位置
print(a_list.index(30, 2))
# 从索引2处到索引4处之间定位元素30的出现位置,因为找不到该元素,会引发 ValueError 错误
print(a_list.index(30, 2, 4))
2.0 列表的特殊操作
1)列表组合
2)列表的乘法
3)判断元素是否在列表内部
4)迭代列表中的每个元素
lis1 = [1, 2, 3]
lis2 = [4, 5, 6]
列表的拼接 不是对应位置相加!!!!
lis3 = lis1 + lis2
print(lis3)
#[1, 2, 3, 4, 5, 6]
魔术方法 面向对象
print(lis1.__add__(lis2))
#[1, 2, 3, 4, 5, 6]
lis3 = lis1 * 3
print(lis3)
# [1,2,3,1,2,3,1,2,3]
print(lis1.__imul__(2))
#[1, 2, 3, 4, 5, 6]
列表不能相乘
print(lis1 * lis2)
#TypeError: can't multiply sequence by non-int of type 'list'
print(2 in lis1)# True
下一篇: C# 图形处理-图片处理