原书这一章思路太狗屎了,堆叠各种语法和内置方法,思路混乱
所自己找点乐子,以介绍函数(方法)为中心,写一点字符串、列表处理的Demo:
目标:提取书中所提供的文本文件中的时间,并且把其中前三个最短时间输出出来。
思路:
一、写一个 get_times 函数(方法)用来提取文本文件中的时间,以列表形式返回数据
二、创建 get_top3 函数(方法)用来对获取的时间列表排序,并且截取前三个最少的时间值返回
三、打印 get_top3 函数返回的列表
一、创建get_times函数:
第一个版本get_times函数
def get_times(file_name): #创建一个名为get_times的函数,参数为file_name
times = [] #定义一个空列表,用来存储从文件中取出的一个个代表时间的字符串
try:
with open(file_name) as fdata:
data = fdata.readline() #由于文件中只有一行数据,所以不需要for来迭代
data_list = data.strip().split(',') #方法串联,从左至右执行
for each_time in data_list:
times.append(each_time)
return(times)
except IOError as ioerr:
print('IO Error: ' + str(ioerr))
好了,让我们打印一下get_times函数返回的结果:
print(get_times('james.txt'))
返回的结果是
['2-34', '3:21', '2.34', '2.45', '3.01', '2:01', '2:01', '3:10', '2-22']
这时间格式太乱了!我们需要统一格式,以便排序使用。
第二个版本的get_times函数
改造get_times函数:
1、首先需要一个sanitize函数来对每个time字符串格式化成统一格式:
def sanitize(time):
if ':' in time:
splitter = ':'
(mins, secs) = time.split(splitter)
elif '-' in time:
splitter = '-'
(mins, secs) = time.split(splitter)
else:
return(time) #如果'.' in time,那么函数什么都不做直接返回time
return(mins + '.' + secs) #函数返回经过处理后的数据(没处理的并没被忽略)上边那行已经返回了
2、改进get_times函数:
def get_times(file_name):
times = []
try:
with open(file_name) as fdata:
data = fdata.readline()
data_list = data.strip().split(',')
for each_time in data_list:
clean_time = sanitize(each_time) #调用sanitize函数以格式化每个time值
times.append(clean_time)
return(times)
except IOError as ioerr:
print('IO Error: ' + str(ioerr))
3、打印get_times的返回值看看:
print(get_times('james.txt'))
结果是:
['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22']
最终版本的get_times函数
虽然上边的代码已经可以正常执行了,但是“列表推导”这个语法糖能给get_times函数的代码带来更多便捷。
见识一下:
def get_times(file_name):
#times = [] 因为times在下边定义,所以把这里注释掉
try:
with open(file_name) as fdata:
data = fdata.readline()
data_list = data.strip().split(',')
times = [sanitize(each_time) for each_time in data_list] #使用列表推导来取代for迭代中列表的append方法
return(times)
except IOError as ioerr:
print('IO Error: ' + str(ioerr))
OK!第一步完成
二、创建 get_top3 函数
第一个版本get_top3函数
def get_top3(times_list):
sorted_times = sorted(times_list) #关于sort和sorted函数的介绍,见文章最下方“碎碎念”
return(sorted_times[0:3])
调用get_top3看看:
times = get_times('james.txt')
get_top3(times)
结果:
['2.01', '2.01', '2.22']
times中有重复的记录,需要在get_top3中把重复的值处理掉
第二个版本get_top3函数
改进get_top3函数:
def get_top3(times_list):
sorted_times = sorted(times_list)
clean_stimes =[]
for each_time in sorted_times: #迭代排序后的每一个列表值
if not each_time in clean_stimes: #判断此值是否已存在于clean_stimes列表中
clean_stimes.append(each_time)
return(clean_stimes[0:3])
再打印来看看:
get_top3(times)
结果:
['2.01', '2.22', '2.34']
最终版本get_top3函数
python中还有一个数据类型——集合。集合跟列表不同点在于集合是无需的,集合内的元素是不能重复的,如果重复,将自动忽略。
所以利用集合的“元素不可重复”的特性来改进一下上边的代码:
def get_top3(times_list):
stimes = set(times_list) #将未排序的列表转换为集合,集合中的重复元素会自动忽略,注意要先转换为集合再排序!为什么?因为集合没有[0:3]这样的分片方法!因为sorted函数返回值为列表!
sorted_times = sorted(stimes)
return(sorted_times[0:3])
完成任务!
碎碎念:
1、函数是咋个回事儿?
就是处理问题的方法,如本科中用来从文件中取出列表的get_times函数,和个格式化用来表示时间的字符串的sanitize函数。
是代码重用的典范。
2、sort和sorted函数:
其实一句话就能说明白:sort方法用来在原列表中排序,sorted把原列表的元素排序后生成一个新列表用来存储排序后的元素。
sort和sorted函数默认按升序排序,如果要按降序排序的话需要reverse这个参数为True
分享到:
相关推荐
2. **函数**:Python中的函数是代码组织的基本单元,可以自定义函数来实现特定功能,了解参数传递、函数返回值以及内置函数(如len()、print())的使用。 3. **列表、元组、字典与集合**:这些是Python的主要数据...
- 语法结构:深入解析Python的基本语法,包括变量、数据类型(如整型、浮点型、字符串、列表、元组、字典等)、控制流(如if-else、for、while)、函数定义与调用、模块导入等。 - 类与对象:讲解面向对象编程的...
首先,实验的目的是让学生熟悉Python中的函数定义语法、调用方法以及函数编程方法。在Python中,我们使用`def`关键字来定义一个函数,后跟函数名和圆括号,圆括号内可以包含函数参数。例如,`drawDigit(d)`函数接受...
Python是当今世界上最受欢迎的编程语言之一,特别是在数据分析、机器学习和Web开发领域。在这个场景中,我们关注的是一个名为"python-amazon-sp-api"的Python库,版本为0.7.2,它被打包成一个名为"python-amazon-sp-...
2. **优化性能**:Python 3.8.8在执行效率上进行了优化,使得代码运行更快,尤其是在处理大量数据时。这得益于编译器的改进和内部算法的优化。 3. **错误修复**:每个版本的更新都会包含对之前版本中已知问题的修复...
- "python-3.8.10-amd64.exe"是Python的安装程序,双击运行后,用户可以选择自定义安装路径、是否添加Python到系统环境变量,以及选择安装额外的组件,如IDLE(集成开发环境)和pip(包管理器)。 - 安装过程中,...
在本压缩包“秒懂百科,Python第2课-少儿编程scratch项目源代码文件案例素材.zip”中,我们找到了一个名为“2-秒懂百科,Python第2课.sb2”的文件,这是一款针对少儿编程教育的项目源代码,旨在帮助孩子们通过...
### Python自定义函数计算给定日期是该年第几天的方法 #### 一、背景介绍 在进行日期相关的数据处理时,经常需要将一个具体的日期转换成一年中的第几天。这种转换对于数据分析、时间序列预测等场景非常有用。例如...
7. **汉字编码转换库**:有时候,可能需要编写或引用第三方库,如`iconv`,来进行更复杂的编码转换和字符集兼容性处理。 8. **汉字转换为拼音**:对于某些应用,可能需要将汉字转换为其对应的拼音,这时可以编写...
Python 3.7.7支持大量的第三方库,这些库可以通过Python的包管理器`pip`轻松安装。例如,`requests`用于HTTP请求,`numpy`和`pandas`用于科学计算,`Django`和`Flask`用于Web开发。丰富的生态系统使得Python成为多...
对于开发者,Python提供了丰富的标准库和第三方库,如NumPy用于数值计算,Pandas用于数据处理,Django和Flask用于Web开发,以及TensorFlow和PyTorch用于机器学习等。 总之,“python-3.6.8-amd64.exe”是一个为64位...
- **【Python第33课】处理文件中的数据** - **主要内容**:讲解如何处理文件中的数据。 - **知识点**: - 数据的解析与提取; - 数据清洗与预处理; - 数据存储与持久化。 - **【Python第34课】break** - **...
7. **优化的import机制**:Python 3.8对导入模块的机制进行了优化,提升了性能,特别是在大型项目中的导入速度。 8. **异步上下文管理器**:在3.8中,asyncio库的异步上下文管理器允许使用`async with`语句,使得...
此外,通过pip,你可以轻松安装和管理Python第三方库,如numpy、pandas、matplotlib等,用于数据处理、科学计算和可视化。 为了更好地利用Python,建议学习Python的基础语法,包括变量、数据类型、控制流、函数、类...
#### Python第33课:处理文件中的数据 - **文件数据处理**:讨论如何对文件中的数据进行分析、过滤等操作。 #### Python第34课:Break - **循环中断**:解释`break`语句的作用,即提前退出循环。 #### Python第...
- 函数可以接受参数,如`isPrime`函数中的`v`,用于传递值到函数内部进行处理。 - 参数类型可以是整数、字符串等,例如`demo`函数接收一个字符串`v`,统计其中的大写字母、小写字母、数字和其他字符的个数。 3. *...
1. **下载安装**:通过运行"python-3.8.2-amd64.exe"启动安装过程,按照提示进行安装,可以选择自定义安装路径和是否将Python添加到系统PATH环境变量中。 2. **验证安装**:安装完成后,打开命令提示符或终端,输入...
7. **标准库和第三方库**:熟悉常用的Python标准库,如os、sys、numpy、pandas等,并了解如何利用PyPI(Python Package Index)安装和使用第三方库。 Python 3.9.1的文档资源非常丰富,官网提供详尽的文档和教程,...
6. **性能提升**:Python 3.10.0通过编译器优化和其他内部改进,提高了整体性能,尤其是在处理大量数据时。 7. **标准库增强**:许多标准库模块得到了增强和更新,例如`os`、`ssl`、`json`等,提供了更多的功能和更...