Python | 不就是数据类型吗(列表篇)

列表(list)

一、初识列表

1.定义

列表是一个可修改的,元素以逗号分割,以中括号包围的有序序列。

2.特点

有顺序,可重复,可修改,可存放不同数据类型的多个数据,由中括号包围

3.声明
  • 列表名 = list()
  • 列表名 = []
# 创建一个空列表
l1 = list()		# 推荐,优先使用
l2 = []			# 不推荐,会和其他语言中数组混淆

# 创建一个非空列表
names = ["貂蝉","王昭君","杨玉环","西施"]		# 推荐
age = list([17,18,19,20])	# 不推荐,语法繁琐

二、索引

列表是有序的序列,因此可以通过下标索引来获取元素

1.格式
 列表名[索引值]
2.编号方式
  • 从左到右(正向):从0开始,逐渐递增,最大索引值:长度-1
  • 从右到左(反向):从-1开始,逐渐递减,最小索引值是:-长度
# 通过索引查看元素
names = ['zs','ls','ww','ml']
# 查看ww
print(names[2])
print(names[-2])
# 索引值要在正确范围内
print(names[8]) # 报错

三、切片

和索引类似,切片是通过冒号来访问一定范围内的元素,一次可以获取多个元素。
注意:切片是将序列拷贝,操作的是拷贝对象,不是原序列。也就是说,切片操作不会改变原数列的元素。

1.格式
列表名[start:stop:step]
  • start :起始位置,包含在内,可省略,默认为第一个元素
  • stop :结束位置,不包含在内,可省略,默认为最后一个元素。
  • step:步长,可省略,默认为1,正数表示从左到右顺序,负数从右到左顺序
# 通过索引查看元素
age= [1,5,1,4,8,9,10,6]
# 将ls和 ww 取出来
age[1:3:1] 	# [5,1]

age[:1] 	# [1]
age[1:] 	# [5,1,4,8,9,10,6]
age[1:6:2] 	# [5,4,9]
age[::1] 	# 等价于 age[::],age[:] [1,5,1,4,8,9,10,6]
age[-3:-1] 	# [9,10]
age[3:1:-1] # [4,1]

# 将age倒序
age[::-1] 
print(age) 	# 不影响原列表
2.注意事项
  • 负数步长是从右到左遍历,所以负数步长的切片开始索引一定要大于结束索引
  • 开始索引和结束索引是负数时,开始索引必须小于结束索引

四、列表的拼接(+)和重复(*)

1.拼接
print('hello'+' world !')	# 'hello world !'

[1,2,3]+['zhangsan','lisi','wangwu']
[1, 2, 3, 'zhangsan', 'lisi', 'wangwu']

注意:只有相同类型的列表才能进行拼接操作。

2.重复

一个数字n乘以一个列表会产生一个新的列表,原来的列表会被重复n次
注意:n必须是整数

l1 = [1, 2]
l2 = l1 * 3
print(l2)  # [1, 2, 1, 2, 1, 2]

五、赋值

lst = [1, 2, 3, 4, 5, 6]
# (1)变量数和列表元素个数一样
a, s, d, f, g, h = lst
print(a, s, d, f, g, h)  # 1 2 3 4 5 6
# (2)变量数和列表元素个数不一样
# a,s,d,f = lst   # 报错
# *可以把剩下的元素压缩,如果不剩为空,*只能有一个
a, s, d, *f = lst
print(a, s, d, f)  # 1 2 3 [4, 5, 6]
a, s, d, f, g, h, *j = lst
print(a, s, d, f, g, h, j)  # 1 2 3 4 5 6 []
a, s, d, *f, g = lst
print(a, s, d, f, g)  # 1 2 3 [4, 5] 6

注意:变量数量和元素数量需保持一致。如果不一致需要用*变量名这种格式来接收多个元素值,与位置无关。

六 、增删改查

1.增加数据
方法描述
append(item)将item(整数、字符串、列表…)添加到列表末尾位置。
insert(pos,item)将item插入到指定位置。pos如果超过最大索引,将item加到末尾;pos如果小于最小索引,将item加到开头。
extend(iterable)末尾一次性追加另一个序列中的多个值。
lst = [1, 2, 3, 4, 5]
# append
lst.append(6)	# [1, 2, 3, 4, 5, 6]
lst1 = lst.append(7)	# None 列表的增加操作是在原列表上进行的,不会返回新列表
lst2 = lst.append(11,22,33,44,55)	# 报错 append()一次只能添加一个值

# insert
lst.insert(2, '222')  # [1, 2, '222', 3, 4, 5]
lst.insert(100, '99999')  # [1, 2, 3, 4, 5, '99999']
lst.insert(-100, -8888)  # [-8888, 1, 2, 3, 4, 5]

# extend
lst.extend("asdf")  # [1, 2, 3, 4, 5, a, s, d, f]
lst.extend("")  # [1, 2, 3, 4, 5]
lst.extend(" ")  # [1, 2, 3, 4, 5, ' ']
lst.extend([9, 8, 7])  # [1, 2, 3, 4, 5, 9, 8, 7]
lst.extend([])  # [1, 2, 3, 4, 5]
lst.extend(range(1,100))
总结
  • append()和insert()一次只能添加一个元素,添加多个需要用extend()
  • extend()只有一个参数,且必须是一个可迭代对象,如果是空的,则什么也不添加。
2.删除数据
方法描述
pop(index)删除指定位置元素,不写默认为最后一个元素,并返回该元素的值。
remove(item)删除指定的一个数据,如果有多个,只删除第一个。没有返回值。 数据不存在会报错。
del 列表名[]删除列表中的数据或整个列表。del不是列表独有的方法,是Python的内置功能。
clear()清空列表数据。
i = [1, 2, 3, 4, 5, 6, 2]

# pop
li.pop()  # 删除最后一个元素
# 删除指定位置元素
li.pop(3)  # 删除元素4
li.pop(100)  # 报错,索引错误

# remove
li.remove(3)  # 删除元素3本身
li.remove(10)  # 错误,元素不存在
li.remove(2)  # 删除第一次出现的元素

# del
del li[3]  # 删除一个元素
del li[2:5]  # 删除多个元素
del li  # 删除li这个列表

# clear
li.clear()  # []    清空li
3.修改数据
方法描述
列表名[index]列表名[index] = new_value。将值赋给指定位置元素。
reverse()顺序倒序。返回一个新列表。
sort()按照ASCII码表顺序进行排序,同种类型才可以比较。返回一个新列表。
# 列表名[index] = new_value
li = [1,2,3,4,5,6,2]
li[2] = 30	# [1, 2, 30, 4, 5, 6, 2]

li = [1, 2, 3, 4, 5, 6]
# reverse()翻转列表
li.reverse()  # [6, 5, 4, 3, 2, 1]

# sort()排序
l2 = [1, 5, 6, 8, 31, 23, 5, 9]
l2.sort()  # 正序 [1, 5, 5, 6, 8, 9, 23, 31]
l2.sort(reverse=True)  # 倒序 [31, 23, 9, 8, 6, 5, 5, 1]
4.查询数据
方法描述
for循环遍历查询列表中所有数据(一条一条的),自定义查看方式
直接使用列表名称查看所有数据(中括号括起来的一条数据)
index()查看某个数据第一次出现的位置,并返回下标
列表名[下标]查看某个位置的数据
count()查看某个数据出现的次数
# index()
li = [1, 2, 3, 4, 5, 6, 2]
li.index(2)  # 1
li.index(10)  # 报错

# count()
li.count(10)  # 0
li.count(2)  # 2
li.count(3)  # 1
5.其他操作
方法描述
len(列表名)列表长度,即列表中元素个数
max(列表名)列表中元素最大值(数据类型相同,且可以比较)
min(列表名)列表中元素最小值(数据类型相同,且可以比较)
copy()复制列表

七、列表嵌套

li = [1,2,3,[4,5,6]]
print(li[1]) # 2
print(li[3][1]) # 5

print(len(li))	# 4

八、列表推导式(高级操作)

1.格式
变量名= [表达式 for 变量 in 列表] 
变量名= [表达式 for 变量 in 列表 if 条件]
2.执行流程

遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算
或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式

# 案例1:将lst中每一个元素进行平方后放入到一个新列表中
lst = [1, 2, 3, 4, 5]
l2 = [i*i for i in lst]

# 案例2:将lst中的奇数放到一个新列表中
lst = [1, 2, 3, 4, 5, 6, 7, 8]
l3 = [i for i in lst if i % 2 == 1]

# 案例3.将一个嵌套列表转换成一个一维列表
#lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 转换成:lst2=[1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
l4 = [j for i in lst for j in i]

# 案例4:现在有一列表lst = [[1,2,3],[4,5,6],[7,8,9]]要求取出[1,4,7] 和 [1,5,9] 元素
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
lst_1 = [i[0] for i in lst]
lst_2 = [lst[i][i] for i in range(len(lst))]
3.推导式好处和不足
  • 优点:简化代码,提高代码的简洁性
  • 不足:降低代码的可读性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值