Python随堂笔记 列表 元组 字典 集合的典型案例

Python随堂笔记 列表 元组 字典 集合的典型案例,第1张

📢📢📢📣📣📣

 

🌴 哈喽!大家好,我是【张时贰】,一位热爱学习的博主!😎😎😎

 

🚀 【张时贰】的写作风格:喜欢用【言简意赅】的方式由【理论】到【实践】去讲解每一个知识点,而不喜欢用【晦涩难懂】的官方陈述😄😄😄

 

🚁【张时贰】博客的主要是自己学习过程中的笔记与心得😊😊😊

 

🚄 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

 

👩‍💻👨‍💻

💸💸💸感谢月薪百万的你支持我!💸💸💸

🌴 2022.04.15 下午

文章目录
    • 前言
    • 4.7 典型案例
      • 4.7.1 查找
      • 4.7.2 排序
      • 4.7.3 推导式
      • 4.7.4 列表作为堆栈和队列使用

前言

🎬本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
🔗Python专栏 传送门
💻提示:本文的环境配置是Python3的开发环境。目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
📽本节主要内容:上节学习了对列表、元组、字典、集合的创建访问删除等,这篇通过案例练习一下

4.7 典型案例 4.7.1 查找

查找:在指定的信息中寻找一个特定的元素

  • 查找算法:如顺序查找算法、二分查找算法等
  • 组合数据函数:如列表的list.index()函数等
🚀 顺序查找

顺序查找算法:将列表中的元素逐个与给定关键字比较
如果有一个元素与给定关键字相等,则查找成功;否则,查找失败

顺序查找算法不要求列表中的元素是有序的,如果列表中有n个元素,顺序查找的最好情况是1,最坏情况是n,时间复杂度是O(n)

使用顺序查找算法查找给定关键字key在列表中是否存在

list1 = [3,6,1,9,5,8,7,4]
key = int(input("请输入要查找的关键字: "))
num = -1
for i in range(len(list1)):
  if list1[i] == key:                 	
    num = i
    break
if num != -1:
  print("要查找的关键字 %d 索引为 %d."%(key,num))
else:
  print("关键字 %d 查找失败!"%key)
'''
请输入要查找的关键字: 9
要查找的关键字9索引为 3
'''
🚀 二分查找

二分查找又称为折半查找,属于有序查找算法,即要求列表中的元素是升序或降序排列的
二分查找的基本思想(假设列表中的元素是按升序排列的)

  1. 将列表中间位置的元素与给定关键字key比较,如果两者相等,则查找成功;否则利用中间位置元素将列表分成前、后两个子列表
  2. 如果中间位置记录的元素大于key,则进一步查找前一子列表;否则进一步查找后一子列表
  3. 重复以上过程,直到找到满足条件的元素使查找成功,或直到子列表不存在为止,此时查找不成功

如果列表中有n个元素,二分查找的最好情况是1,最坏情况是[log2(n)]+1([log2(n)]指对log2(n)的结果取整),时间复杂度是O(log2(n))

def binary_search(key,list):
  low = 0
  high = len(list)1		#下标从0开始,所以长度-1
  while (low <= high):
    middle = int((low + high) / 2)
    if list[middle] > key:    #在列表的前半部分
      high = middle – 1
    elif list[middle] < key:  #在列表的后半部分
      low = middle + 1
    else:
      return middle        #关键字对应元素的位置
  return -1                    #查找失败
if _ _name_ _ == '_ _main_ _':
  list = [2,6,13,25,28,37,41,58,69]
  key = int(input("请输入要查找的关键字: "))
  location = binary_search(key,list)
  if location != -1:
     print("要查找的关键字 %d 索引为 %d." %(key,location))
  else:
     print("关键字 %d 查找失败!"%key)
'''
请输入要查找的关键字: 28
要查找的关键字28索引为 4
'''
4.7.2 排序 🚀 冒泡排序

重复地访问要排序的元素,依次比较相邻两个元素,如果顺序错误就把它们调换过来,直到没有元素需要交换,排序完成

  1. 比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置
  2. 对每对相邻元素做同样的工作,从开始第一对到结尾的最后一对
  3. 针对所有的元素重复以上的步骤,除了最后一个
  4. 重复上面的步骤,直到没有任何一对数字需要比较

list1 = [8,3,1,5,2]
N=list1.__len__()
print('排序之前:',end = ' ')
for i in range(N):
  print(list1[i],end = ' ')
print()

#排序
for i in range(N - 1):
  for j in range(N-i-1):
    if list1[j] > list1[j+1]:
      list1[j],list1[j+1] = list1[j+1],list1[j]
print('排序之后:',end = ' ')
for i in range(N):
  print(list1[i],end = ' ')
'''
排序之前: 8 3 1 5 2
排序之后: 1 2 3 5 8
'''
🚀 选择排序

初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列,然后,从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾,以此类推,直到所有元素均排序完毕

list1 = [8,3,1,5,2]
N = list1.__len__()
print('排序之前:',end = ' ')
for i in range(N):
  print(list1[i],end = ' ')
print()
#排序
for i in range(N - 1):
  min = i
  for j in range(i + 1,N):
    #12,13行可以不要,如果j==i那么这次内循环14行就没有意义,直接跳出就可以了
    if i == j:
      break;
    if list1[min] > list1[j]: min = j
  list1[i],list1[min] = list1[min],list1[i]
print('排序之后:',end = ' ')
for i in range(N):
  print(list1[i],end = ' ')
'''
排序之前: 8 3 1 5 2
排序之后: 1 2 3 5 8
'''
4.7.3 推导式

推导式提供了创建组合数据的简单途径

推导式一般在 for 之后跟一个表达式,后面有零到多个for或if子句,返回结果是一个根据其后的 for 和 if条件生成的组合数据

通过推导式可以快速创建列表、元组、字典和集合等

列表推导式的一般格式为:[表达式 for 变量 in 列表 [if 条件]],其中,if条件表示对列表中元素的过滤,可选

元组、字典、集合等推导式的创建与列表创建类似,只需要将外层[]替换成相应的{}或()

使用推导式创建列表

[x ** 2 for x in range(6)]      #[0, 1, 4, 9, 16, 25]
[[x,pow(10,x)] for x in range(4)]	#[[0, 1], [1, 10], [2, 100], [3, 1000]]
[abs(x) for x in [1,-2,3,-4,5,-6] if x < 0]		#[2, 4, 6]
list1 = [1,2,3]
list2 = [4,5,6]
[(x,y) for x in list1 for y in list2]	
#[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
list3 = ["指南针","火药","造纸术","印刷术"]
list4 = ["中国劳动人民","唐朝炼丹家","蔡伦","毕昇"]
[list3[i] + "由" + list4[i] + "发明" for i in range(len(list3))]
#['指南针由中国劳动人民发明', '火药由唐朝炼丹家发明', '造纸术由蔡伦发明', '印刷术由毕昇发明']

使用推导式创建集合

list = [1,2,3,3,2,4]
{item for item in list}         				
{1, 2, 3, 4}
{str.title() for str in {"chinese","america","england"}}	 
{'America', 'Chinese', 'England'}

使用推导式创建字典

{i: i % 3 == 0 for i in range(1,11)}
{1: False, 2: False, 3: True, 4: False, 5: False, 6: True, 7: False, 8: False, 9: True, 10: False}
chineseList = ["运动","饮食","营养"]
englishList = ["motion","diet","nutrition"]
{chineseList[i]: englishList[i] for i in range(len(chineseList))}
#{'运动': 'motion', '饮食': 'diet', '营养': 'nutrition'}

使用推导式创建元组

questionList = ['name','profession','favorites']
answerList = ['Linda','programming','music']
tuple(zip(questionList,answerList))
#(('name', 'Linda'), ('profession', 'programming'), ('favorites', 'music'))
4.7.4 列表作为堆栈和队列使用

列表作为堆栈使用

list1 = []
list1.append("three")            		
list1.append("two")             		
list1.append("one")             		
print(list1.pop())                		
print(list1.pop())                		
print(list1.pop())                		
'''
one
two
three
'''

列表作为队列使用,列表作为队列添加和删除元素

from collections import deque          
q = deque(["李白","杜甫","王维"])     
q.append("韩愈")                 	           
q.append("白居易")               	
print("出队列元素: ",q.popleft())      
print("出队列元素: ",q.popleft())     
print("队列剩余元素: ",q)                
'''
出队列元素: 李白
出队列元素: 杜甫
队列剩余元素: deque(['王维', '韩愈', '白居易'])
'''

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/725746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存