python常用数据结构之--列表list--Loxida

python 常用数据结构-列表

1、列表的定义:

①列表是有序的可变元素的集合,使用中括号包围,元素之间用逗号分隔。

②列表是动态的,可以随时扩展和收缩。

③列表是异构的,可以同时存放不同类型的对象。

④列表中允许出现重复元素。

2、列表的使用

1)通过构造方法创建列表,list()

#通过构造函数创建,构造方法
a = list() # 空列表
print(type(a), a)
a1 = list("today")
print(type(a1), a1)

![|2560x1314](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps13.jpg)

2)通过中括号填充元素

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

![|2560x890](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps14.jpg)

3)列表推导式

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

![|2560x750](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps15.jpg)

3、列表的索引

①start>0:从左向右

②start<0:从左向右

#列表的索引
a = [1, 2, 3, 4, 5, "hello", "world", "a", "b", "c"]
#正向索引
print(a[2])
#反向索引
print(a[-2])

![|2560x1016](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps16.jpg)

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])

![|2284x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps17.jpg)

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)

![|2028x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps18.jpg)

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()查询当前列表元素个数

![|2560x1220](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps20.jpg)

(2)extend()方法

1)将一个可迭代对象的所有元素,添加到列表末尾;入参为可迭代对象

#extend()方法,批量添加元素
a.extend("hello")
print(len(a), a)
b = ['a', 'b', 'c']
a.extend(b)
print(a)

![|2524x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps21.jpg)

(3)insert(index, item)方法

1)将一个对象插入到指定的索引位置。index为索引值,item为对象

#insert()方法
a = [1, 2, 3, 4, 5]
a.insert(0, "hello")
a.insert(3, "world")
print(a)

![|2560x1424](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps22.jpg)

(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)

![|2392x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps23.jpg)

(5)remove(item)方法

1)移除列表中第一个等于 item 的元素

#remove(item)方法,目标元素在列表中要存在,否则会报错
a = ['a', 'b', 'c']
a.remove('c')
print(a)

![|2560x1290](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps24.jpg)

(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)

![|2186x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps25.jpg)

(7)reverse()方法:

1)将列表中的元素顺序反转,反转只是针对索引值,元素之间不相互比较。

#reverse()方法
a = ['a', 'b', 'c']
a.reverse()
print(a)

![|2560x1234](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps26.jpg)

8、列表嵌套

①嵌套列表是指在列表里存放列表

②列表的常用方法都适用于嵌套列表

a = [[1, 2, 3], ['a', 'b', 'c']]
print(a[1][2]) # a[第一个列表对象][列表对象里的第2个元素]
#第一个列表对象添加一个元素
a[0].append('go')
print(a)

![|2560x1342](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps27.jpg)

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)

![|2088x1440](file:////private/var/folders/6b/5ldcnlx94c3dxx8gvg2lgg_00000gn/T/com.kingsoft.wpsoffice.mac/wps-jiyu/ksohtml//wps28.jpg)