Python常用的8种经典数据结构:
- Python原生数据结构:元组tumple() 列表list[] 集合{} 字典{A:B}
- Numpy包中的数据结构:数组NDarray(带多种操作),矩阵Matrix(多种线性代数计算)
- Pandas包中的数据结构:序列Series(索引+1列数据),数据框DataFrame(索引+多列数据集)
列表list[ ]
特点
- 列表list是最重要的Python内置对象之一,是包含若干元素的有序连续内存空间。
- 当列表增加或删除元素时,列表对象自动进行内存的扩展或收缩,从而保证相邻元素之间没有空隙。
- 为了提高效率,应尽量从列表尾部进行元素的追加和删除操作。
1
创建list:
1.一维列表的创建。使用[]可以直接创建一个列表对象。列表是一种有序的序列,可以随时添加和删除其中的元素。
numbers = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]empty = []print('numbers的元素是',numbers, '\n显示该数据的结构类型',type(numbers), '\nempty的元素是',empty)
numbers = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
empty = []
print('numbers的元素是',numbers,
'\n显示该数据的结构类型',type(numbers),
'\nempty的元素是',empty)
结果:
numbers的元素是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 显示该数据的结构类型 empty的元素是 []
numbers的元素是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 显示该数据的结构类型 empty的元素是 []
2.多维列表的创建。尽管list默认是一维的,但在实际应用中我们可以根据需要创建多维列表。多维列表的创建可以使用[]的嵌套。
list_two=[[1,2],['a','b']]list_two
list_two=[[1,2],['a','b']]
list_two
结果:
[[1, 2], ['a', 'b']]br
br
2
list查询操作
- 切片:list[a:b]返回一个含有列表中第a至b-1( [a,b)左闭右开区间 )个元素的列表对象。list[::a]返回一个从列表第一个元素起始,步长为a的列表对象。
- 索引:list[i]则会索引下标为i的元素,若i为负,则从列表尾部从后至前访问第i个元素。
print('\n列表切片',numbers[1:8], '\n固定步长切片',numbers[::2], '\n从后往前索引',numbers[-3])
print('\n列表切片',numbers[1:8],
'\n固定步长切片',numbers[::2],
'\n从后往前索引',numbers[-3])
结果:
列表切片 [1, 2, 3, 4, 5, 6, 7] 固定步长切片 [0, 2, 4, 6, 8, 10, 12, 14] 从后往前索引 12
固定步长切片 [0, 2, 4, 6, 8, 10, 12, 14]
从后往前索引 12
3
list增加操作
列表的增加。append()可以在列表末尾增加新的项目,可以增加一个元素,也可以增加一个list对象从而成为多维列表。
numbers.append('zhao')print('增加元素后的列表numbers:',numbers)list_two.append(['Hello','Girl'])print('增加列表后的列表:',list_two)
numbers.append('zhao')
print('增加元素后的列表numbers:',numbers)
list_two.append(['Hello','Girl'])
print('增加列表后的列表:',list_two)
结果:
增加元素后的列表numbers:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 'zhao', 'zhao']增加列表后的列表:[[1, 2], ['a', 'b'], ['Hello', 'Girl'], ['Hello', 'Girl']]
增加元素后的列表numbers:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 'zhao', 'zhao']
增加列表后的列表:[[1, 2], ['a', 'b'], ['Hello', 'Girl'], ['Hello', 'Girl']]
4
list删除操作
列表的删除。remove()函数可以删除指定值的元素,list.remove(i)会删除list对象中值为i的元素,若不存在则报错。pop()函数可以删除指定下标的元素,默认为列表对象的最后一个元素,list.pop(i)将删除下标为i的元素。
numbers.remove('zhao')list_two.pop()print('删除指定下标元素后的列表对象:',numbers, '\n删除最后一个元素的列表对象:',list_two)
numbers.remove('zhao')
list_two.pop()
print('删除指定下标元素后的列表对象:',numbers,
'\n删除最后一个元素的列表对象:',list_two)
结果:
删除指定下标元素后的列表对象:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 删除最后一个元素的列表对象:[[1, 2], ['a', 'b']]
删除指定下标元素后的列表对象:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
删除最后一个元素的列表对象:[[1, 2], ['a', 'b']]
5
list修改操作
列表修改。list[i]=x 可以直接替换列表指定下标的元素。(注意与元组区分)
numbers[0] = 100print('\n修改后的列表为',numbers)
numbers[0] = 100
print('\n修改后的列表为',numbers)
结果:
修改后的列表为 [100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
修改后的列表为 [100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
6
list转换为其他数据结构
列表数据类型转换。列表作为最常用的数据类型之一,可以便利地转换为各种数据类型。和元组相似,单个列表无法直接转换成字典。
print('\n列表转元组:\n',tuple(numbers), '\n列表转字符串:\n',str(numbers), '\n',type(str(numbers)))
print('\n列表转元组:\n',tuple(numbers),
'\n列表转字符串:\n',str(numbers),
'\n',type(str(numbers)))
结果:
列表转元组: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100) 列表转字符串: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
列表转元组:
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100)
列表转字符串:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
7
其他数据结构转list
- 使用list()函数可把元组,range对象,字符串,字典,集合或其他可迭代对象转换为列表。
- 需要注意,字典转列表时默认对字典的“键”进行转换。可使用字典对象的items()方法或.values()方法对字典的元素或“值”进行转换。
list_from_tumpl = list((1,2,3)) #元组转列表list_from_range = list(range(5)) #range对象转列表list_from_str = list('我爱你') #字符串转列表list_from_set = list({'z','f','y','c','w','j'}) #集合转列表list_from_dic_key = list({'B':'z','G':'z'}) #字典转列表(默认为键key)list_from_dic_items = list({'B':'z','G':'z'}.items()) #字典转列表(指定为items)list_from_dic_values = list({'B':'z','G':'z'}.values()) #字典转列表(指定为值value)print('依次显示:','\n',list_from_tumpl,'\n',list_from_range, '\n',list_from_str,'\n',list_from_set, '\n',list_from_dic_key,'\n',list_from_dic_items, '\n',list_from_dic_values)
list_from_tumpl = list((1,2,3)) #元组转列表
list_from_range = list(range(5)) #range对象转列表
list_from_str = list('我爱你') #字符串转列表
list_from_set = list({'z','f','y','c','w','j'}) #集合转列表
list_from_dic_key = list({'B':'z','G':'z'}) #字典转列表(默认为键key)
list_from_dic_items = list({'B':'z','G':'z'}.items()) #字典转列表(指定为items)
list_from_dic_values = list({'B':'z','G':'z'}.values()) #字典转列表(指定为值value)
print('依次显示:','\n',list_from_tumpl,'\n',list_from_range,
'\n',list_from_str,'\n',list_from_set,
'\n',list_from_dic_key,'\n',list_from_dic_items,
'\n',list_from_dic_values)
结果:
依次显示: [1, 2, 3] [0, 1, 2, 3, 4] ['我', '爱', '你'] ['w', 'y', 'f', 'c', 'j', 'z'] ['B', 'G'] [('B', 'z'), ('G', 'z')] ['z', 'z']
依次显示:
[1, 2, 3]
[0, 1, 2, 3, 4]
['我', '爱', '你']
['w', 'y', 'f', 'c', 'j', 'z']
['B', 'G']
[('B', 'z'), ('G', 'z')]
['z', 'z']
8
list其他操作
- (1)list.reverse()可以使列表倒置。
- (2)len(list)可以统计列表元素的个数。
- (3)list.sort()可以使列表元素升序排列。
numbers.reverse()print('\n倒置后的列表是',numbers, '\n统计列表元素的个数',len(numbers))numbers.sort()print('sort列表升序排列',numbers)
numbers.reverse()
print('\n倒置后的列表是',numbers,
'\n统计列表元素的个数',len(numbers))
numbers.sort()
print('sort列表升序排列',numbers)
结果:
倒置后的列表是 [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 100] 统计列表元素的个数 15sort列表升序排列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
倒置后的列表是 [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 100]
统计列表元素的个数 15
sort列表升序排列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
- (4)max(list)返回list中最大值。(list中元素需可比较)
- (5)min(list)返回list中最小值。(list中元素需可比较)
- (6)list.count(x)返回x在list中出现总次数。
demo_list = [0,5,3,8,100,20,3,2,3]print('\ndemo_list中的最大元素:',max(demo_list), '\ndemo_list中的最小元素:',min(demo_list), '\ndemo_list中3出现的次数:',demo_list.count(3))
demo_list = [0,5,3,8,100,20,3,2,3]
print('\ndemo_list中的最大元素:',max(demo_list),
'\ndemo_list中的最小元素:',min(demo_list),
'\ndemo_list中3出现的次数:',demo_list.count(3))
结果:
demo_list中的最大元素:100 demo_list中的最小元素:0 demo_list中3出现的次数:3
demo_list中的最大元素:100
demo_list中的最小元素:0
demo_list中3出现的次数:3
- (7)list.append(x)将x追加到list尾部。
- (8)list.extend(L)将列表L中的所有元素追加到list尾部。
- (9)list.insert(index,x)在list的index位插入x。
demo_list = [0,5,3,8,100,20,3,2,3]demo_list.append('SHE') #在demo_list末尾追加'SHE'print('demo_list.append(SHE)',demo_list)demo_list.extend(numbers) #在demo_list末尾追加numbers中的元素print('demo_list.extend(numbers)',demo_list)demo_list.insert(3,'HI') #在demon_list的[3]位置插入元素'HI'print('demo_list.insert(3,"HI")',demo_list)
demo_list = [0,5,3,8,100,20,3,2,3]
demo_list.append('SHE') #在demo_list末尾追加'SHE'
print('demo_list.append(SHE)',demo_list)
demo_list.extend(numbers) #在demo_list末尾追加numbers中的元素
print('demo_list.extend(numbers)',demo_list)
demo_list.insert(3,'HI') #在demon_list的[3]位置插入元素'HI'
print('demo_list.insert(3,"HI")',demo_list)
结果:
demo_list.append(SHE) [0, 5, 3, 8, 100, 20, 3, 2, 3, 'SHE']demo_list.extend(numbers) [0, 5, 3, 8, 100, 20, 3, 2, 3, 'SHE', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]demo_list.insert(3,"HI") [0, 5, 3, 'HI', 8, 100, 20, 3, 2, 3, 'SHE', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
demo_list.append(SHE) [0, 5, 3, 8, 100, 20, 3, 2, 3, 'SHE']
demo_list.extend(numbers) [0, 5, 3, 8, 100, 20, 3, 2, 3, 'SHE', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
demo_list.insert(3,"HI") [0, 5, 3, 'HI', 8, 100, 20, 3, 2, 3, 'SHE', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 100]
9
list对象支持的运算符
- + :连接两个列表
- * :列表的重复
a = [1,2]b = [3,4]print("a+b:",a+b)print("a*3",a*3)
a = [1,2]
b = [3,4]
print("a+b:",a+b)
print("a*3",a*3)
结果:
a+b: [1, 2, 3, 4]a*3 [1, 2, 1, 2, 1, 2]
a+b: [1, 2, 3, 4]
a*3 [1, 2, 1, 2, 1, 2]
参考资料:
[1]董付国.Python程序设计基础(第二版)[M].北京:清华大学出版社,2015:42-59
[2]刘经纬,陈佳明.创新创业+新工科教学质量提升研究——零基础学会Python人工智能[M].北京:首都经济贸易大学出版社,2020:25-26
[3]嵩天.PYE6.2-序列类型及操作v2.5[Z].2020