欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习第6节—列表

程序员文章站 2022-05-28 14:26:14
...

列表

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