列表的内置方法:
#1. 列表的声明方式
list0 = list() #空列表: 列表存在 但是没有元素 ===> []
print(list0)
list0 = list("abcdefg")
print(list0)
['a', 'b', 'c', 'd', 'e', 'f', 'g']
list0 = list([12, 34, 56])
print(list0)
list0 = list((23, 45, 67))
print(list0)
#只将字典中的键存放于列表中
list0 = list({"语文":87, "数学":22})
print(list0)
['语文', '数学']
set0 = {45, 67, 87, 24, 45}
print(set0)
{24, 67, 45, 87}
list0 = list({45, 67, 87, 24, 45})
print(list0)
[24, 67, 45, 87]
#字面量形式声明
list0 = [12, 45, 67]
print(list0)
[12, 45, 67]
#在列表中的运算符操作
# 加法运算 ---> 将两个列表的元素叠加在一起 存放到一个新的列表中
list1 = [23, 22, 12]
list2 = [90, 80, 70]
new_list = list1 + list2
print(new_list)
print(list1)
print(list2)
[23, 22, 12, 90, 80, 70]
[23, 22, 12]
[90, 80, 70]
#取地址
list1 = [11, 12]
list2 = [11, 12]
print(id(list1))
print(id(list2))
38873096
38873352 #他俩地址不一样
#比较的是元素内容 !=
res = list1 == list2
print(res)
True
a = 10
b = 10
print(id(a))
print(id(b))
1694461232
1694461232
list1 = [11, 12]
list2 = [11, 12, 13]
# 将两个列表中的元素一一进行比较 > <= <
res = list1 >= list2
print(res)
False
list1 = [11, 12]
res = list1 * 3 # 生成的是新的列表
print(res)
print(list1)
[11, 12, 11, 12, 11, 12]
[11, 12]
list0 = [77, 88, 66, 22, 44, 55, 66]
#3. 获得列表的元素个数
length = len(list0)
print(length)
#脚标从0-6 还可以通过负值来获取 -len(list0) -1
#4. 根据脚标操作列表中的元素 格式: 序列名[脚标]
#获取元素
value = list0[0]
print(value)
#value = list0[-length-1] #IndexError: list index out of range
#print(value)
#根据脚标 修改对应位置的元素
list0[0] = 99
print(list0)
#遍历元素
for item in list0:
print(item)
print("________________")
#通过脚标进行遍历
for i in range(length):
print(list0[i])
print("________________")
#获得列表中的最大值
max_value = max(list0)
print(max_value)
list1 = ["hello", "nice", "you", "beautiful"]
max_value = max(list1, key=len)
print(max_value)
#在列表中追加元素 直接影响原列表
list1 = ["hello", "nice", "you", "beautiful"]
list1.append("very")
print(list1)
# 在指定位置添加元素
list1 = ["hello", "nice", "you", "beautiful"]
list1.insert(0, "good")
print(list1)
# 合并其他序列 : 会将序列中每一个元素合并到原列表中
list1 = ["hello", "nice", "you", "beautiful"]
list1.extend("你好")
print(list1)
list1.extend(["big", "little", "light"])
print(list1)
['good', 'nice', 'you', 'beautiful', 'very', '你', '好', 'big', 'little', 'you']
#删除列表元素
#删除末尾元素
item = list1.pop()
print(list1)
print(item)
#删除指定位置的元素
item = list1.pop(1)
print(item)
print(list1)
#删除元素: 如果有重复的 删除的是第一次出现的
list1.append("you")
print(list1)
# list1.remove("you")
# print(list1)
#获的某个元素在列表中出现的次数
num = list1.count("you")
print(num)
#列表中是可以存在重复元素的 去除重复的元素 只保留1个
list0 = [12, 34, 56, 32, 15, 12, 45, 34, 12]
# ====> [12, 34, 56, 32, 15, 45]
#元素顺序可能会发生变化
res = set(list0)
print(res)
list2 = list(res)
print(list2)
#声明一个空的列表 用于保存无重复元素的数据
no_empty_list = []
#遍历原列表
for item in list0:
#不存在与空列表中 才放进去
if item not in no_empty_list:
no_empty_list.append(item)
print(no_empty_list)
print(list1)
#提取子列表 -- 切片 [start:stop:step]
#跳跃取值 -- 设置步长
sub_list = list1[::2]
print(sub_list)
#提取 2-7之间元素 并将其反转
sub_list = list1[7:1:-1]
print(sub_list)
#整体逆向
sub_list = list1[::-1]
print(sub_list)
#系统提供了一个反转的方法
list1.reverse()
print(list1)
list0 = [34, 56, 19, 71, 27, 85, 63]
#对列表中的元素进行排序 #将数据升序或者降序
#默认是升序的
list0.sort()
print(list0)
#降序
list0.sort(reverse=True) #reverse控制升序降序 默认是升序 值为False
print(list0)
#默认的排序是根据大小进行排序的
list0 = ['you', 'little', 'big','very', 'beautiful']
list0.sort()
print(list0)
#按照字符串长度进行排序
list0.sort(key=len, reverse=True)
print(list0)
list0 = list() # ===> list0 = []
print(list0)
获得列表中的最大数(max()):
#系统方法max()
def get_max(src_list):
#先声明一个变量 记录列表中的最大值 假设第一个元素是最大的
max_value = src_list[0]
for item in src_list:
if item > max_value:
max_value = item
return max_value
res = get_max([12, 34, 56, 17, 99, 78, 65])
print(res)
def get_max_2(src_list):
#声明一个变量 记录最大值 假设第一个元素是最大的
max_value = src_list[0]
#通过脚标来进行遍历
for i in range(1, len(src_list)):
if src_list[i] > max_value:
max_value = src_list[i]
return max_value
res = get_max_2([12, 34, 56, 17, 99, 78, 65])
print(res)
#找到最值的索引 通过索引找到元素
def get_max_3(src_list):
#声明一个变量 记录最大值 假设第一个元素是最大的
max_index = 0
#通过脚标来进行遍历
for i in range(1, len(src_list)):
if src_list[i] > src_list[max_index]:
max_index = i
return src_list[max_index]
res = get_max_3([12, 34, 56, 17, 99, 78, 65])
print(res)
得到指定功能的字符串(max(list0,key=)):
max(list0,key=)
'''
["hello", "nice", "you", "beautiful"]
按照字符串的长度进行比较
-- 新生成一组比较的数据: 存放的是每个元素的长度
[5, 4, 3, 9]
得先找到最大长度 ----> 最大的长度找到原列表中的元素
根据索引来找方便一些
'''
def cus_max(src_list, key=None):
#声明一个列表 存放进行比较的元素数据
# 如果key==None 进行比较的元素就原列表中的元素 否则 先赋予一个空列表
compare_list = src_list if key == None else []
#如果 key != None 将列表中每一个元素 作用于key 或的进行比较的数据 并将数据存放于空的列表中
if key != None:
#遍历列表
for item in src_list:
value = key(item)
#将返回的数据存放于空的列表中
compare_list.append(value)
#要在compare_list列表中 找到最值的下标
#假设 第一个元素是最大的
max_index = 0
for i in range(1, len(compare_list)):
if compare_list[i] > compare_list[max_index]:
max_index = i
#根据最值脚标找到原串中对应的元素
return src_list[max_index]
list0 = ["hello", "nice", "you", "beautiful"]
res = cus_max(list0, key=len)
print(res)
三种排序算法:
1.冒泡排序:
规则:
将列表中的元素每一次从左到右取元素两两进行比较 如果前者>后者 两者交换位置
list0 = [55, 23, 71, 95, 48, 22]
a = 10
b = 11
a , b = b, a
#控制一下遍历的次数
for out in range(1, len(list0)):
#内层控制列表的遍历
for i in range(len(list0) - out):
if list0[i] > list0[i + 1]:
list0[i], list0[i + 1] = list0[i + 1], list0[i]
#print(list0)
print(list0)
2.选择排序:
规则:
第一次遍历:
取第一个位置的元素与之后每一个位置的元素进行比较 -- 获得最小值
第二次遍历:
取第二个位置的元素与之后每一个位置的元素进行比较 -- 获得次小值
...
排序结束
#选择排序
list1=[22,55,88,44,11,56]
for i in range(1,len(list1)):
for j in range(i,len(list1)):
if list1[i-1]>list1[j]:
list1[i-1],list1[j] = list1[j],list1[i-1]
print(list1)
3.插入排序:
部分有序的效果
规则:
第一次遍历
从脚标为1的元素 向前 两两元素进行比较 如果后者 < 前者 交换位置
第二次遍历
从脚标为2的元素 向前 两两元素进行比较 如果后者 < 前者 交换位置
第三次遍历
从脚标为3的元素 向前 两两元素进行比较 如果后者 < 前者 交换位置
...
排序结束
list0 = [55, 23, 71, 95, 48, 22]
for out in range(1, len(list0)):
for i in range(out, 0, -1):
if list0[i] < list0[i - 1]:
list0[i], list0[i - 1] = list0[i - 1], list0[i]
else:
#因为插入排序从后向前 导致部分有序 比较的时候不满足上面条件 代表这一次遍历顺序已经拍好了 终止这一次遍历
break
print(list0)
二分法查找:
def half_search_desc(src_list, key):
src_list.sort(reverse=True) # 大 ---> 小
min_index = 0
max_index = len(src_list) - 1
mid_index = (min_index + max_index) // 2
#判定区间是否合理进行查找
while max_index >= min_index:
if key > src_list[mid_index]:
max_index = mid_index - 1
elif key < src_list[mid_index]:
min_index = mid_index + 1
else:
#代表找到了
return mid_index
#区间更改之后 更新中间索引
mid_index = (min_index + max_index) // 2
else:
#区间不合理
return -1