【老九】【Python】列表及常用操作及算法实现
列表可以存储任意大小的数据集合
列表是Python中的一种数据类型
列表中既可以包含同类型元素,也可以包含不同的类型元素(推荐使用同类型)
使用list类定义的序列,包括了创建、操作和处理列表的方法
下表中的list4不能成功,使用range的话必须使用推导式来生成才行
推导式:my_list7 = [i for i in range(10)]
my_list8 = [num for num in range(100) if num % 2 == 0] #0到100的偶数
访问列表当中的某个元素使用list[index]的方法,list为列表对象。index表示下标,从0
开始,到len(list)-1(len函数可以求出列表的长度)。下标可以为负数,实际上返回
的是倒数的第几个元素。
访问列表当中的某个区间片段(切片)使用list[index1:index2]方法,前开后闭原则。取
列表切片时,只能往后面走(start->end),否则返回空列表;如果end大于列表的最大下标,那么end默认为列表的最大下标切片可以取负值。
in 可以判断某个元素是否在列表中(not in 表示不在的意思),返回值为布尔值
多个列表的相加实际上就是返回连接的多个列表,list1+list2+list3
列表乘以整数时,返回n个列表的连接
列表不支持减法
在列表中的比较,首先比较前两个元素,如果不同就决定了比较结果,如果相同,就继
续比较接下来的两个元素,重复这个顺序。如果比较的是字符串,则比较的是ASCII
码,’A’-65 ‘a’-97 大小写之间相差一个32(空格-32)
上表中:后面的类型表示该方法执行后的返回类型
insert(index,elem),如果index越界了默认在最后一个位置进行插入
pop(index),如果index越界了,程序会报错
remove(elem),如果删除的元素不存在,程序会报错
random模块
random.shuffle(list) 将list列表中的元素乱序
str.split(str1) str表示string对象,str1表示分割符,将str按照str1分割符进行分割,返回值为列表
线性查找(列表较大时,效率比较低下)
二分查找法(前提:列表已经按照升序进行排序了)
基本原理:首先将要查找的元素(key)与列表的中间元素比较
- 如果key小于中间元素,只需要在列表的前一半元素中继续查找,将最大边界的下标设置为中间下标-1
- 如果key和中间元素相等,匹配成功,查找结束
- 如果key大于中间元素,只需要在列表的后一半元素中继续查找,将最小边界的下标设置为中间下标+1
上表中的lst是一个已经排好序的列表
需要设置三个下标值,中间下标、最大边界下标、最小边界下标。
中间下标 = (最大边界下标+最小边界下标)// 2
循环条件为:最小边界下标 >= 最大边界下标
冒泡排序(使用双重for循环)
原理:外层循环控制比较的轮数,内层循环则是控制本轮比较,将列表中
的最大值或者最小值换位到列表的最后端。然后进行下一轮的排序比较
因为最大值或者最小值已经放到最后端,所以本轮可以比上轮少比较一次。
注意:比较的轮数等于列表元素的个数-1
本轮比较的次数会比上一轮比较的次数少1次
在比较中将最大值或最小值往列表的后端移
为了节省效率,如果在内循环中没有发生交换,说明排序已经完成,那么直接调
跳出排序循环。
选择排序(和冒泡排序很像,使用双重for循环)
原理:1、首先在每轮中找到列表中的最小元素并将它和第一个元素交换
2、找到本轮剩余元素中的值最小的元素病和剩余列表中的第一个元素交换
3、以此类推,直到只剩下一个元素
设置最小值的下标,默认为本轮的第一个元素(min_index=i)。
使用内循环,找到真实的最小值下标,然后将真实的最小值和第一个值交换
插入排序:(将一个新元素重复插入到一个已排序的子列表中,将插入元素的前面的所有元素看成是一个子列表。)
while条件中的lst[j] > temp 表示升序;list[j] < temp 则为降序
二维列表(列表中的元素也是一个列表)
lst = [[],[],[]]
元组和列表的操作非常相似,最大的区别是,列表中可以无限添加元素;元组中的元素一旦确定,就不能删除或添加了
补充:中文字符串按拼音排序
第二步
pinyin.get_pinyin(name) 根据name中文获取相应的拼音
将获取到的中文拼音和中文保存在一个列表中,将这个列表作为拼音
结果列表的一个元素。
然后添加到拼音的结果列表中,添加完成后使用sort排序。
第三步
取出中文的时候要注意,拼音的结果列表中的元素是中文拼音和中文的
列表,所以取的时候使用了2个[]。第1个[]代表取拼音结果列表的
第几个元素,第2个[]表示取中文拼音和中文组成的列表的第几个
元素。(二位列表)