python 常用数据结构-列表
1、列表的定义:
①列表是有序的可变元素的集合,使用中括号包围,元素之间用逗号分隔。
②列表是动态的,可以随时扩展和收缩。
③列表是异构的,可以同时存放不同类型的对象。
④列表中允许出现重复元素。
2、列表的使用
1)通过构造方法创建列表,list()
#通过构造函数创建,构造方法
a = list() # 空列表
print(type(a), a)
a1 = list("today")
print(type(a1), a1)

2)通过中括号填充元素
#通过中括号填充元素
b = [1, 2, 3, "hello", "world"]
print(type(b),b)

3)列表推导式
#列表推导式,循环中打印出来的i放在循环前面,作为列表元素
c = [i for i in range(1, 10) if i% 2 == 0]
print(type(c), c)

3、列表的索引
①start>0:从左向右
②start<0:从左向右
#列表的索引
a = [1, 2, 3, 4, 5, "hello", "world", "a", "b", "c"]
#正向索引
print(a[2])
#反向索引
print(a[-2])

4、列表的切片
①切片的步长:step不能为0,默认为1,step
②step>0:从左向右切,start必须小于stop才有结果,否则为空
③step<0:从右向左切,start必须大于stop才有结果,否则为空
#列表的切片[star:stop:step]
#切片的步长:step不能为0,默认为1
#step>0:从左向右切,start必须小于stop才有结果,否则为空
#step<0:从右向左切,start必须大于stop才有结果,否则为空
print(a[2:6:2])
print(a[1:7:3])
print(a[2::2])
#步长为负数
print(a[8:2:-2])

5、列表的运算符
#列表的运算符
#加法
a1 = [1, 2, 3]
a2 = ["hello"]
#print(a1+a2)
a3 = a1+a2
print(a3)
#乘法
b1 = ['hello']
print(b1*3)
#b2 = b1 * 3
#print(b2)

6、列表成员的检测
①in:检测成员是否在列表中,是返回True,否返回False
②not in:检测列表是否不包含某一个元素,不包含返回True,包含返回False
#列表的成员检测
#in 检测成员是否在列表中,是返回True,否返回False
#not in 检测列表是否不包含某一个元素,不包含返回True,包含返回False
a = [1, 2, 3, 'hello', 'world']
print(1 in a)
print(4 in a)
print("ok" not in a)
! (file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps19.jpg)
7、列表方法:
(1)append(item)方法
1)将一个对象 item 添加到列表的末尾。
#append()方法,添加元素
a = []
a.append(1)
a.append('哈哈')
print(len(a), a) # len()查询当前列表元素个数

(2)extend()方法
1)将一个可迭代对象的所有元素,添加到列表末尾;入参为可迭代对象
#extend()方法,批量添加元素
a.extend("hello")
print(len(a), a)
b = ['a', 'b', 'c']
a.extend(b)
print(a)

(3)insert(index, item)方法
1)将一个对象插入到指定的索引位置。index为索引值,item为对象
#insert()方法
a = [1, 2, 3, 4, 5]
a.insert(0, "hello")
a.insert(3, "world")
print(a)

(4)pop()方法
1)弹出并返回所指定索引的元素。入参索引值 index,可不传,传返回指定索引的元素,不传未指定索引则返回末尾元素;索引值不正确,或者列表已经为空,则引发 IndexError 错误
#pop()方法
a = [1, 2, 3, 4, 5, 6, 7]
a.pop() # 不输入默认从最后一个移出
list_a = a.pop(3) # 移出的元素赋值给list_a
print(list_a, a)
#索引值不存在
b = [1, 2, 3, 4, 5, 6, 7]
b.pop(7)
print(b)

(5)remove(item)方法
1)移除列表中第一个等于 item 的元素
#remove(item)方法,目标元素在列表中要存在,否则会报错
a = ['a', 'b', 'c']
a.remove('c')
print(a)

(6)sort()方法
1)对列表进行原地排序,只使用 < 来进行各项间比较;sort(key=None, reverse=False)支持2个关键字参数;
①key:指定带有一个参数的函数,用于从每个列表元素中提取比较键。
②reverse:默认值为 False 表示升序,为 True 表示降序,返回None
#sort(key=None, reverse=False)方法
a = [1, 6, 2, 8, 9]
a.sort() # 不输入默认为升序
print(a)
a.sort(reverse=True) # 默认值为 False 表示升序,为 True 表示降序
print(a)
b = ['C', 'python', 'java', 'go']
#b.sort(key=len) # 根据长度进行排序,此处reverse默认为False升序
b.sort(key=len, reverse=True)
print(b)

(7)reverse()方法:
1)将列表中的元素顺序反转,反转只是针对索引值,元素之间不相互比较。
#reverse()方法
a = ['a', 'b', 'c']
a.reverse()
print(a)

8、列表嵌套
①嵌套列表是指在列表里存放列表
②列表的常用方法都适用于嵌套列表
a = [[1, 2, 3], ['a', 'b', 'c']]
print(a[1][2]) # a[第一个列表对象][列表对象里的第2个元素]
#第一个列表对象添加一个元素
a[0].append('go')
print(a)

9、列表推导式
①列表推导式是指循环创建列表,相当于 for 循环创建列表的简化版
②语法:[x for x in li if x …]
#列表推导式
list_a = [i for i in range(1, 11) if i % 2 == 0] # 提取元素i,放在for循环前面
#if判断条件可不加
list_a1 = [i for i in range(1, 11)]
list_b = [j ** 2 for j in range(1, 11) if j % 2 == 0]
print(list_a)
print(list_a1)
print(list_b)
