python列表与列表算法详解(2)
作者:wakeyo_J 发布时间:2023-06-10 21:11:10
标签:python,列表,列表算法
1. 案例【三酷猫列表记账】
操作需求:
(1)用列表对象记录三酷猫每天钓鱼的种类和数量
(2)统计三酷猫所钓水产品的总数量和预计收获金额
(3)打印财务报表一张。
#三酷猫列表记账
nums = 0 #统计数量变量
amount = 0 #统计金额数量
i = 0 #循环控制变量
fish_record = ['1月1日','鲫鱼',18,10.5,'1月1日','鲤鱼',8,6.2,'1月1日','鲢鱼',7,4.7,'1月2日','草鱼',2,7.2,'1月2日','鲫鱼',3,12,'1月2日','黑鱼',6,15,'1月3日','乌龟',1,71,'1月3日','鲫鱼',1,9.8]
print('钓鱼日期名称数量单价(元)')
print('-'*30)
while i<len(fish_record):
nums = nums + fish_record[i+2] #累计数量
amount = amount + fish_record[i+2]*fish_record[i+3] #累计金额
print('%s,%s,%.2f,%.2f'%(fish_record[i],fish_record[i+1],fish_record[i+2],fish_record[i+3]))
i += 4 #循环控制
print('-'*30)
print(' 总数:%d,总金额%.2f元'%(nums,amount))
结果:
2. 案例【三酷猫冒泡法排序】
冒泡排序:通过不断调整排序元素的次序,实现集合元素从小到大的排序过程。
** 冒泡排序过程**
(1)取左边第一个元素,然后与后面的元素进行比较,若发现后面的元素比第一个元素小,则交换位置,继续往后比较,一直比较调整到最后一个元素,该元素为最大的元素。
(2)再取第一个元素,根据第一步一次比较、调整,直到倒数第二个停止;其他元素都依次循环比较、调整,每次循环多减一次,n-m(n为集合长度,m为每循环一次,增加一次,m从0 开始)。
(3)所有元素比较、调整完毕,完成集合元素增序排序。
冒泡法排序示意图
fish_records = [18,8,7,2,3,6,1,1]
i = 0 #循环控制变量
compare = 0 #比较元素初始值
fish_len = len(fish_records) #获取列表长度
while i<fish_len:
j = 1 #循环控制变量
while j<fish_len-i: #循环一遍,长度减1
if fish_records[j-1]>fish_records[j]: #比较前后两个元素的大小
compare = fish_records[j-1] #前一个大的放到临时比较变量里
fish_records[j-1] = fish_records[j] #把小的元素放到前面
fish_records[j] = compare #把临时变量里的大元素放到后面
j += 1 #内循环控制变量+1
i += 1 #外循环控制变量+1
print(fish_records)
结果:
3. 案例【三酷猫二分法查找】
二分法查找:指在有序集合里,对集合下标范围通过取中位法获取对应的元素值,进行叠代查找比较,直至找到所需要的元素。如set1[1…N],(1…N为集合元素下标顺序值)先取一个下标中位值K1= (1+N)/2,获取set1[K1]值与查找对象M进行比较。若set1[K1]等于M,则查找成功,返回查找位置;若set1[K1]小于M,则在[K+1,N]区间里再取中位值,进行查找比较;若set1[K1]大于M,则在[1,K-1]区间里再取中位值,进行查找比较。通过不断缩小查找区间范围,可以快速获取所需要查找的值。
fish_records = [1,1,2,3,6,7,8,18]
low = 0 #查找范围下界
high = len(fish_records)-1 #查找范围上界
find_value = 7 #要寻找的值
find_OK = False #是否找到标志,True为找到
i = 1
while low<=high:
middle = int((low+high)/2) #用int取整数,避免浮点数问题的发生
if find_value == fish_records[middle]: #找到时
find_OK = True #设置标志为True
break
elif find_value>fish_records[middle]: #没有找到,要找的值范围大于中位值时
low = middle+1 #范围在middle+1和high之间
elif find_value<fish_records[middle]: #没有找到,要找的值范围小于中间值时
high = middle-1 #范围在low和middle-1之间
i += 1
if find_OK:
print('%d在列表下标%d处,找了%d次。'%(find_value,middle,i))
else:
print('要找的数%d没有!找了%d次。'%(find_value,i))
结果:
代码运算示意图:
来源:https://blog.csdn.net/m0_55697123/article/details/119088129


猜你喜欢
- 在上一个文章里写了关于左(右)侧定宽右(左)侧自动缩放的两列浮动,这个文章就要说一下三列浮动的问题了。在之前说过,两列浮动是其他多列浮动的基
- 如下所示:# Seed random number generatornp.random.seed(42)# Compute mean no
- pandas可以将读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,然后我们可以通过操作DataFrame进行数
- 1、fastcgi ,通过flup模块来支持,在nginx里对应的配置指令是 fastcgi_pass2、http,nginx使用proxy
- 查了查《VBSCRIPT 速查手册》InstrRev的用法:InstrRev函数,功能:返回某字符串在另一个字符串中出现的从结尾计起的位置语
- 文件的属性所谓属性,就是能够通过一个文件对象得到的东西。>>> f = open("131.txt",
- 前言技术能解决的事情改技术技术解决不了的事情该需求现状假设我们目前有两张表业务表 书( t_a_book ) 阅读历史记录表 (t_r_bo
- 这篇文章主要介绍了Python语言异常处理测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 如题:只需要给定输出特征图的大小就好,其中通道数前后不发生变化。具体如下:AdaptiveAvgPool2d CLASStorch.nn.A
- 本案例将学习运用LyScript计算特定程序 * 定某些片段的Hash特征值,并通过xlsxwriter这个第三方模块将计算到的hash值存储
- 你搜索这个,你会发现好多都是np.zeros(5,2),嗯都是复制的一个国外的帖子,然而没有翻译人家的话。然后你愤怒的关闭页面。这简直就是文
- 一、集合的基本信息集合:集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重。格式:set1 = set()或a={值1
- 外部临时表通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束
- 具体的网址倒是没保存,可是我这个人习惯把好的代码记起方法保存下来,现在贴出来,希望原作者体谅。 ---上个月月初第一天 select CON
- 目录01 安装02 剪辑01 安装对视频进行批量剪辑,需要三个库,分别是Moviepy库和Pathlib库,还有Tkinter库。首先我们对
- mysql-5.7.23-winx64 解压版详细安装教程,供大家参考,具体内容如下1、Click here to download Mys
- Request Payload 和 Form Data 请求头上的参数差别在于:Content-TypeForm DataPost表单请求代
- Git 工作区、暂存区和版本库基本概念我们先来理解下Git 工作区、暂存区和版本库概念工作区:就是你在电脑里能看到的目录。暂存区:英文叫st
- 目录1)连接请求的变量1、max_connections2、back_log3、wait_timeout和interative_timeou
- resample()resample()进行重采样。重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程。把高频度的数据