XX学Python·列表
# 列表定义格式:变量名 = [数据1,数据2,...]或a = list()用list方法
# 如果列表中只有一个元素,必须加逗号:变量名 = [数据,]
name_list = ['Rose', 'Jack', 'Tom']
print(name_list) # ['Rose', 'Jack', 'Tom']
print(type(name_list)) # <class 'list'>
# 在Python中,列表可以储存不同数据类型的数据
# 但在开发中,为了处理方便,一个列表一般储存同种数据类型
list1 = ['name', 12, False, [1,2,3]]
print(list1) # ['name', 12, False, [1, 2, 3]]
列表的查询
index,count,in,not in
name_list = ['Rose', 'Jack', 'Tom', 'Jack']
# 索引查询,和字符串完全一致
print(name_list[0]) # Rose
print(name_list[1]) # Jack
print(name_list[-2]) # Tom
# 利用索引进行切片
print(name_list[::-1]) # ['Jack', 'Tom', 'Jack', 'Rose']
print(name_list[1:3:1]) # ['Jack', 'Tom']
print(name_list) # ['Rose', 'Jack', 'Tom', 'Jack'],对原列表无修改
# index从左至右查询指定元素的索引,返回第一次出现的正向索引,没有查询到报错
print(name_list.index('Jack')) # 1
# count 计数,查询指定元素在列表中出现的次数
print(name_list.count('Jack')) # 2次
# in 判断元素是否在列表里,在返回True,不在返回False
print('Jack' in name_list) # True
# not in 判断元素是否不在列表里,不在返回True,在返回False
print('Jack' not in name_list) # False
列表的增加
append,extend,insert。不会产生新的列表,都是在原有列表进行增加。
# append追加到列表末尾
num_list = [1, 2, 3, 4]
print(num_list.append(5)) # None,直接打印append方法的调用不会输出任何内容
# 因为list在使用append方法时不会产生新的列表,而是在原有列表上进行修改
print(num_list) # [1, 2, 3, 4, 5]
# extend追加数据序列
# 格式:列表.extend(数据序列),括号里必须是可迭代对象
list1 = [1,2,3]
list2 = [4,5,6]
list1.extend(list2)
print(list1) # [1, 2, 3, 4, 5, 6]
print(list2) # [4, 5, 6]
# 追加字符串序列时,会将字母依次拆分放入列表中
str1 = 'love'
list2.extend(str1)
print(list2) # [4, 5, 6, 'l', 'o', 'v', 'e']
# 括号内必须是可迭代对象
# list2.extend(7) # TypeError: 'int' object is not iterable
list2.extend('7')
print(list2) # [4, 5, 6, 'l', 'o', 'v', 'e', '7']
list2.extend(['ai','ni'])
print(list2) # [4, 5, 6, 'l', 'o', 'v', 'e', '7', 'ai', 'ni']
# insert指定索引插入,格式:列表.insert(插入位置索引,要插入的数据)
num_list1 = [100, 300, 400]
num_list1.insert(1,200)
print(num_list1) # [100, 200, 300, 400]
# 在开发中除非明确所有索引引用都修改完成,否则不用使用insert。
# append和extend对比
list3 = [11,12,13]
list4 = [14,15,16]
# append将list4当作一个元素追加到列表末尾
list3.append(list4) # [11, 12, 13, [14, 15, 16]]
# extend的将list4当作多个元素进行拆分追加
list3.extend(list4) # [11, 12, 13, 14, 15, 16]
# 添加5
c_list = [1, 2, 3]
c_list += [5]
c_list.extend([5])
print(c_list)
列表中的删除
del list[下标],list.pop(下标),list.remove(删除内容),list.clear()
# del 将数据引用切断,格式:del 要删除内容
list1 = [1,2,3,4]
# del list1
# print(list1) # NameError: name 'list1' is not defined
# del不仅可以删除元素,也可删除任何变量,非常强大,但有些不安全
del list1[2] # 通过索引获取要删除的元素并删除,索引超出范围会报错
print(list1) # [1, 2, 4]
# 如果是循环中能删除吗?
# 没删除,因为i是临时变量,这里是将i和2的引用关系删除,但list1和2的引用关系没删除
for i in list1:
if i == 2:
del i
print(list1) # 还是[1, 2, 4],没有删除
# pop 删除指定索引元素,并返回该元素。
# 格式:列表.pop(要删除元素的索引),索引超出范围会报错
list2 = [11,12,13,14]
print(list2.pop(2)) # 删除后可返回被删除的对象为13
print(list2) # [11, 12, 14]
print(list2.pop()) # 若不传值,默认删除最后一个元素为14
print(list2) # [11, 12]
# remove 删除指定元素(从左至右第一次出现的元素)
# 格式:列表.remove(删除元素),没有会报错。
list3 = [3,4,5,6,7,8,5,5]
list3.remove(5)
print(list3) # [3, 4, 6, 7, 8, 5, 5]
# clear 清空列表
# 将列表置为[],但与list3=[]有本质区别。后者是给了新的空间,以前的还在。
list3.clear()
print(list3) # []
列表的修改
list[索引] = 修改后的值,list.reverse(),list.sort(key=排序规则函数,reverse=真或假)
# 通过索引进行修改格式:list[索引] = 修改后的值
list1 = [1,2,3,4]
list1[1] = 6 # 索引要存在,不然报错
print(list1) # [1, 6, 3, 4]
list1[2], list1[3] = 7, 8 # 可使用对多个变量赋值的形式修改多个值
print(list1) # [1, 6, 7, 8]
# reverse 列表的反转。格式:列表.reverse()
list2 = [1,2,3,4]
list2.reverse() # print的话返回值是None
print(list2) # [4, 3, 2, 1]原列表改变了
# sort 排序。格式:列表.sort(key=排序规则函数,reverse=真或假)
list3 = [2,6,43,2,41,421]
list3.sort() # 默认排序为升序
print(list3) # [2, 2, 6, 41, 43, 421]
# 降序方法一:先排序,再反转
list3 = [2,6,43,2,41,421]
list3.sort()
list3.reverse()
print(list3)
# 降序方法二:直接使用倒叙排列
list3 = [2,6,43,2,41,421]
list3.sort(reverse=True)
print(list3)
# 需求:根据list3中每个元素%7的余数大小进行排序(了解,后续还会讲)
list3 = [2,6,43,2,41,421]
list3.sort(key=lambda x: x % 7)
print(list3)
列表的遍历
# while遍历列表
# len()函数可以查询列表的长度
list1 = [12, 123, 1, 1, 1234, 12, 34, 8]
# print(len(list1))
i = 0
while i < len(list1):
print(list1[i])
i += 1
# for 遍历列表
# 推荐使用for循环遍历容器类型(数据序列)
for i in list1:
print(i)
# 输出索引和对应元素
list = ['html', 'js', 'css', 'python']
for a, b in enumerate(list):
print ("%s :%s" % (a, b))
# 结果为0 :html 1 :js 2 :css 3 :python
列表的嵌套
- 列表中嵌套其他的子列表
name_list = [['小明', '小红', '小绿'], ['Tom', 'Lily', 'Rose'], ['张三', '李四', '王五']]
# 需求:获取值李四
print(name_list[2]) # 获取李四所在子列表
print(name_list[2][1]) # 再从子列表获取李四
# 需求:获取嵌套列表中的每一个值
for i in name_list: # 这样获得的是一级列表中的元素,即子列表
print(i)
for sub_list in name_list: # 要获得嵌套后列表的元素,需要循环嵌套
for name in sub_list:
print(name)