《Head First Python》第五章--理解数据

Head First Python(中文版)-源代码指南 本文还有配套的精品资源,点击获取 简介:《Head First Python》是一本Python编程入门经典书籍,其中文版源代码提供了丰富的实践案例。本指南包含了书中多个章节的源码,涵盖了从基础到进阶的Python编程概念和技术,适用于Windows和Mac OS操作系统。通过学习这些源代码,初学者可以深入理解Python的基础语法,并接触到实际编程中的常见问题和解决方法,... 阅读详情

先给个数据链接:Head First Python 数据集

第五章的问题是帮助Kelly教练获得每个运动员跑得最快的三个时间

数据集:





  • 首先,数据杂乱无章先进行初步处理
  1. 按逗号分隔;
  2. 把冒号、‘-’都换成‘.’,统一数据格式;
  3. 排序

# 时间格式化函数
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 读取文件内的时间数据
try:
    with open('james.txt') as jaf:
        data = jaf.readline()
    james = data.strip().split(',')
    with open('julie.txt') as juf:
        data = juf.readline()
    julie = data.strip().split(',')
    with open('mikey.txt') as mif:
        data = mif.readline()
    mikey = data.strip().split(',')
    with open('sarah.txt') as saf:
        data = saf.readline()
    sarah = data.strip().split(',')
except IOError as err:
    print("File Error: " + str(err))

c_james = []
c_julie = []
c_mikey = []
c_sarah = []

# 列表转换
for each_item in james:
    c_james.append(sanitize(each_item))
for each_item in julie:
    c_julie.append(sanitize(each_item))
for each_item in mikey:
    c_mikey.append(sanitize(each_item))
for each_item in sarah:
    c_sarah.append(sanitize(each_item))
# 排序输出
print(sorted(c_james))
print(sorted(c_julie))
print(sorted(c_mikey))
print(sorted(c_sarah))
  • 推导列表
  • 上面在做列表转换时,依然有点复杂,代码重复多,下面我们采用列表推导的方式进行列表转换
# 时间格式化函数
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 读取文件内的时间数据
try:
    with open('james.txt') as jaf:
        data = jaf.readline()
    james = data.strip().split(',')
    with open('julie.txt') as juf:
        data = juf.readline()
    julie = data.strip().split(',')
    with open('mikey.txt') as mif:
        data = mif.readline()
    mikey = data.strip().split(',')
    with open('sarah.txt') as saf:
        data = saf.readline()
    sarah = data.strip().split(',')
except IOError as err:
    print("File Error: " + str(err))

# 列表转换
c_james = [sanitize(each_item) for each_item in james]
c_julie = [sanitize(each_item) for each_item in julie]
c_mikey = [sanitize(each_item) for each_item in mikey]
c_sarah = [sanitize(each_item) for each_item in sarah]

# 排序输出
print(sorted(c_james))
print(sorted(c_julie))
print(sorted(c_mikey))
print(sorted(c_sarah))
  • 再回到最初的问题上:最快的三个时间(显然也不能重复)
  • 最快的三个时间很简单,用c_james[0:3]就可以得到,但是,这里存在着重复数据,怎样去除重复呢?
  • 一个办法是使用迭代的办法,每当插入数据时,先判断这个数据在列表中是否已存在,存在则舍弃
# 时间格式化函数
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 读取文件内的时间数据
try:
    with open('james.txt') as jaf:
        data = jaf.readline()
    james = data.strip().split(',')
    with open('julie.txt') as juf:
        data = juf.readline()
    julie = data.strip().split(',')
    with open('mikey.txt') as mif:
        data = mif.readline()
    mikey = data.strip().split(',')
    with open('sarah.txt') as saf:
        data = saf.readline()
    sarah = data.strip().split(',')
except IOError as err:
    print("File Error: " + str(err))

# 列表转换
james = sorted([sanitize(each_item) for each_item in james])
julie = sorted([sanitize(each_item) for each_item in julie])
mikey = sorted([sanitize(each_item) for each_item in mikey])
sarah = sorted([sanitize(each_item) for each_item in sarah])

# 排序输出
u_james = []
for t in james:
    if t not in u_james:
        u_james.append(t)
print(u_james[0:3])
u_julie = []
for t in julie:
    if t not in u_julie:
        u_julie.append(t)
print(u_julie[0:3])
u_mikey = []
for t in mikey:
    if t not in u_mikey:
        u_mikey.append(t)
print(u_mikey[0:3])
u_sarah = []
for t in sarah:
    if t not in u_sarah:
        u_sarah.append(t)
print(u_sarah[0:3])
  • 此外,Python还给我们提供了集合,集合的特点是无序、无重复
  • set() 创建一个空集合
# 时间格式化函数
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 读取文件内的时间数据
try:
    with open('james.txt') as jaf:
        data = jaf.readline()
    james = data.strip().split(',')
    with open('julie.txt') as juf:
        data = juf.readline()
    julie = data.strip().split(',')
    with open('mikey.txt') as mif:
        data = mif.readline()
    mikey = data.strip().split(',')
    with open('sarah.txt') as saf:
        data = saf.readline()
    sarah = data.strip().split(',')
except IOError as err:
    print("File Error: " + str(err))

# 列表转换、排序、输出
james = sorted(set([sanitize(each_item) for each_item in james]))[0:3]
print(james)
julie = sorted(set([sanitize(each_item) for each_item in julie]))[0:3]
print(julie)
mikey = sorted(set([sanitize(each_item) for each_item in mikey]))[0:3]
print(mikey)
sarah = sorted(set([sanitize(each_item) for each_item in sarah]))[0:3]
print(sarah)
  • 文件读取部分依然有许多重复,封装文件读取部分
# 时间格式化函数
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
    (mins, secs) = time_string.split(splitter)
    return(mins + '.' + secs)

# 对文件读取进行封装
def reader(file):
    try:
        with open(file) as datafile:
            return (datafile.readline().strip().split(','))
    except IOError as err:
        print("File Error: " + str(err))
        return (None)
# 读取文件内的时间数据
james = reader('james.txt')
julie = reader('julie.txt')
mikey = reader('mikey.txt')
sarah = reader('sarah.txt')

# 列表转换、排序、输出
james = sorted(set([sanitize(each_item) for each_item in james]))[0:3]
print(james)
julie = sorted(set([sanitize(each_item) for each_item in julie]))[0:3]
print(julie)
mikey = sorted(set([sanitize(each_item) for each_item in mikey]))[0:3]
print(mikey)
sarah = sorted(set([sanitize(each_item) for each_item in sarah]))[0:3]
print(sarah)
  • BULLET POINTS
  • 排序的两种方法,list.sort()"原地"排序,sorted(list)“复制”排序,几乎可以对任何数据结构排序。
  • 向sort()或sotred()传入reverse=True可以按降序排序。
  • 如果有一下代码
new_l = []
for t in old_l:
    new_l.append(len(t))

使用列表推导重写这个代码,可以写作:

new_l = [len(t) for t in old_l]

  • 要访问列表中多个数据,可以使用分片。例如:my_list[0:3],这会访问0,1,2三个位置的数据。

  • 使用set()工厂方法可以创建一个集合。

多源Transformer融合非结构化数据的小微信贷评分模型实战 在信贷风险评估中,传统评分卡模型依赖结构化财务数据,面对小微企业报表失真、信息不对称等痛点往往力不从心。以注意力机制为核心的Transformer架构,天然擅长捕捉文本、图像等非结构化数据中的语义与上下文特征,为风控建模提供了新的增量信息路径。通过多源编码器将财务特征、舆情文本、图像信号统一映射到融合空间,并利用交叉注意力自动学习各数据源对风险判断的贡献权重,能够有效弥补传统模型的非线性拟合短板。本文结合PyTorch工程实现,从数据预处理、融合编码器设计、训练优化到可解释性分析,系统拆解了多源Transf 阅读详情

相关推荐

吉林大学编译原理实验包:可调试可扩展的C++编译器前端工程

编译器前端是编译原理教学与实践的核心环节,涉及词法分析、语法分析、抽象语法树(AST)构建及中间代码生成等基础技术原理。其技术价值在于将形式文法转化为可执行语义分析流程,支撑编程语言实现、静态分析工具开发与教学演示系统搭建。典型应用场景包括课程设计、编译器教学实验、LL(1)/递归下降分析器原型开发,以及符号表、四元式等核心组件的工程化验证。本资源以吉林大学编译原理实验为背景,提供开箱即用的C++工程骨架,支持GDB调试、AST可视化与文法动态扩展,覆盖词法分析器、递归下降语法分析器、符号表管理及IR生成等

weixin_34289454的博客 344

【笔记】Head First Python 01 基础知识:快速入门

基础知识01 基础知识:快速入门1、第一个程序2、标准库认识创建文件编辑已有文件3、使用 `if/elif/else` 语句完成判定:4、代码组:要点[^1]5、在 Shell 里执行代码6、for 循环例1例2例37、使代码暂停后再执行8、生成随机整数导入模块shell 可以帮助罗列模块中的函数名shell 可以将帮助文档直接显示randint 函数的上手使用9、odd2.py要点[^2]10、beersong.pyhelp(range)STOP 值允许你控制范围何时结束STEP 值允许你控制如何生成范围

cedtek的博客 1289

锂电池寿命预测实战:基于LSTM与RNN的时间序列建模与PyTorch实现

时间序列预测是工业设备健康管理的核心技术,锂电池容量随循环次数的退化过程正是典型的非平稳时序数据。普通回归模型难以刻画容量曲线中的平台期与“膝盖点”拐弯,而循环神经网络(RNN)能够基于历史窗口建模局部退化斜率,LSTM凭借门控机制进一步解决了长序列记忆衰减问题。通过CALCE公开数据集,结合PyTorch构建LSTM模型,可以完成从数据清洗、滑窗切分、训练到滚动外推的完整流程,输出容量衰减曲线与剩余寿命(RUL)估计。这一方案在储能电站运维、电动车BMS健康状态(SOH)评估等场景具有直接的工程价值,本文

weixin_34259232的博客 275

【跟着Head First学Python】1、基础知识:快速入门

近来准备学一下python,研究生主要做有关数据挖掘方面的,因此要学。只看书和码代码感觉很虚,写一写博客感觉会好很多。 head first使用的是python 3.7,因此我也先学3.7,听说2.4和3.7大多数都是相同的,所以并无大碍。 笔记上一般只记录自己觉得需要记的或者易错的地方。 1、import 与 from import import 后面接的是模块,模块里面有一大堆函数。因...

四轩茶屋 701

Head First Python中文版 高清 PDF版

属Head First系列,送给大家, 内容不错, 可以看看。

Head First Python(中文版).pdf

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。这本书适合入门python。

Head First Python学习总结

Head First Python学习总结初识Python Python术语BIF——内置函数。 组(suite)——Python代码块,会通过缩进来指示分组。 功能齐全(Batteries included)——指Python提供了快速高效地完成工作所需的大多数功能。 IDLE说明IDLE shell允许在编写代码的同时试验代码。 调整IDLE的首选项,以适应工作方式工作。 记住:使用sh

没有最好,只有更好! 3363

告别环境配置噩梦:VSCode + MinGW 下 OpenGL (glad/glm/glfw) 一站式配置指南(含常见错误排查)

本文提供了一份详细的VSCode与MinGW下OpenGL开发环境配置指南,涵盖glad、glm和glfw三大核心库的安装与调试。通过逐步指导解决常见错误,帮助开发者快速搭建高效的OpenGL开发环境,特别适合初学者避免环境配置中的常见陷阱。

weixin_42557803的博客 490

python书籍推荐:Head First Python(中文版)

所属网站分类: 资源下载 >python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/64/ 来源:python黑洞网,专注python资源,python教程,python技术! Head First 系列的书籍一直饱受赞誉,这本也不例外。Head First Python主要讲述了Python 3的基础语法...

weixin_39363245的博客 684

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置

为了达到原理图和PCB两两交互的功能,需要在ORCAD中将允许交互进行勾选,这样才可以,执行菜单命令Options-Preference后,我们打开参数界面,进行选择Miscellaneous菜单,将交互模式进行勾选。在做硬件pcb设计的时候,原理图选中一个元器件,希望可以再PCB中可以直接选中。对于网表必须是导入第一方网表,第三方是无效的。在allegro中使能/关闭交互式布局功能。

weixin_50499137的博客 2080

HDMI调试避坑指南:从AVI InfoFrame到通用控制包,这些DataIsland Packet细节千万别忽略

本文深入解析HDMI调试中DataIsland数据包的关键细节,包括AVI InfoFrame、通用控制包和音频时钟再生包(ACR)的配置与故障排查。通过实际案例和寄存器配置示例,帮助工程师快速定位显示异常、色彩失真和音频中断等问题,提升HDMI接口调试效率。

weixin_30897233的博客 637

Hameg 205-X模拟示波器接LabVIEW:三条落地路线与参数避坑

在电子测试与测控系统中,模拟示波器擅长实时观察波形,LabVIEW则承担数据采集、分析与存储。老式模拟示波器没有USB、GPIB等数字总线,无法直接远程读数,常见思路是经数据采集卡旁路分路采样,此时采样率、分辨率和量程直接决定数据质量;也可利用X-Y模式观察相位关系与李萨如图形,或通过相机拍屏结合图像处理提取波形曲线。合理选型与共地处理能提升测量稳定性,适用于教学实验、旧设备数字化归档和低成本调试。围绕Hameg 205-X与LabVIEW的组合,三条路线的接线、参数计算与常见坑点由此展开。

weixin_34009794的博客 290

Qt 文件对话框(QFileDialog)实战指南 —— 从基础到高级应用

本文是Qt文件对话框(QFileDialog)的实战指南,从基础静态函数调用到高级对象模式应用,全面解析了文件选择、保存、目录选取及多选等核心功能。文章深入探讨了MIME类型过滤、自定义侧边栏、信号槽实时响应及状态持久化等高级技巧,并提供了跨平台开发中的避坑指南与最佳实践,帮助开发者高效、稳健地集成文件操作功能。

weixin_29306261的博客 376

python中文版教程推荐_python书籍推荐:Head First Python(中文版)

Head First 系列的书籍一直饱受赞誉,这本也不例外。Head First Python主要讲述了Python 3的基础语法知识以及如何使用Python快速地进行Web、手机上的开发。下面是该书每章结束部分的知识摘要:第一章 初始Python:人人都爱列表(Lists) 1. 从命令行或者IDLE里都可以运行Python 3;2. 标识符是指代数据对象的名称,它本身并没有“类型”,但是它所...

weixin_39756696的博客 487

Ubuntu24.04LTS上Ollama GPU加速配置指南:从驱动安装到多卡均衡负载

本文详细介绍了在Ubuntu24.04LTS系统上配置Ollama GPU加速的完整指南,包括NVIDIA驱动安装、CUDA Toolkit配置、Ollama在线与离线安装方法,以及多GPU负载均衡优化策略。通过实战案例和性能调优建议,帮助开发者充分利用硬件资源提升大型语言模型的运行效率。

weixin_29255731的博客 760

YOLOv8全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 518

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 969

UNet改进(3):Local Attention增强的UNet网络-医学图像分割

本文提出一种改进的UNet网络,通过引入局部注意力机制增强医学图像分割性能。该方法在传统UNet编码器-解码器结构中,创新性地整合了通道注意力和空间注意力模块,使网络能自适应聚焦关键区域。注意力机制通过特征重标定增强有用信息并抑制噪声,显著提升了小目标分割和边缘检测的精度,同时保持较低计算开销。实验表明,该方法在肿瘤分割等任务中具有更好表现,为医学图像处理提供了新的优化思路。

2501_91516851的博客 2063

joyful-pandas 全十章练习参考答案精讲:从 NumPy 向量化到 pandas 高阶数据操作

《joyful-pandas》是一份以实战练习驱动的 pandas 中文教程,其每一章末尾都配有若干道综合练习(Ex1、Ex2 等),而 [source/Content/参考答案.rst](https://link.gitcode.com/i/07dfe9dc5f94b021edaf2eb504d20340) 正是这些练习的官方标准解答集。这份文档贯穿第一章的 NumPy 预备知识到第十章的时间序

gitblog_00793的博客 175

Windows 下运行 openclaw 出现“‘openclaw‘ 不是内部或外部命令,也不是可运行的程序或批处理文件“的解决方案

方案适用场景推荐指数检查并手动添加 PATH明确知道全局安装目录,只是没加进PATH⭐⭐⭐⭐⭐pnpm setup 自动配置使用 pnpm 安装,想要省心的自动化方式⭐⭐⭐⭐⭐npx 免安装临时运行快速验证核心程序是否正常,排除法排查⭐⭐⭐⭐清理残留后重装npm/pnpm 混用导致版本混乱⭐⭐⭐⭐改用 WSL2不熟悉 Windows 路径体系,长期使用⭐⭐⭐'openclaw' 不是内部或外部命令这类报错,本质上不是"程序坏了",而是。

一键难忘的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从零实现大语言模型:Happy-LLM开源教程带你手写LLaMA2

最近在社区里看到很多开发者,尤其是刚接触AI大模型的朋友,普遍反映一个痛点:大模型相关的资料要么是晦涩难懂的学术论文,要么是零散的博客片段,缺乏一个从零开始、手把手带你“造轮子”的系统性教程。想深入理解Transformer、预训练、微调这些核心概念,却不知从何下手;想动手实现一个自己的小模型,又被复杂的代码和配置劝退。 如果你也有类似的困惑,那么今天介绍的这份开源教程《Happy-LLM》或许就是你一直在寻找的答案。它在GitHub上已经收获了超过31.7K的星标,被众多开发者誉为“最适合新手入门的大模型

weixin_33739541的博客 528

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MacNativeGames 实测:王国之泪原生上 Mac

MacNativeGames 让《王国之泪》《旷野之息》游戏自己的 ARM64 代码直接在 Apple 芯片上跑,NVN 图形在 Metal 4 上重建,全程不经过模拟器。判断先说:构建管线扎实、可复现,但入门成本真实,愿意花时间就值得长期跟。 ## 第一印象:MacNativeGames 是原生构建流水线,不是游戏合集 它是什么,一句话说清:一条用你自己合法导出的游戏文件"兑换"可玩 Mac

gitblog_00718的博客 453

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CANN ATB大模型推理加速实战:FlashAttention流水线与连续批处理在昇腾NPU上的手把手部署全流程

在React Native中开发鸿组件(这里指的是鸿蒙(HarmonyOS)组件),你需要了解鸿蒙开发的基础以及如何在React Native项目中集成鸿蒙应用。鸿蒙OS是由华为开发的一个分布式操作系统,主要用于其智能设备,如手机、平板、智能手表等。首先,你需要熟悉鸿蒙OS的开发环境设置和基本开发流程。React Native本身主要用于Harmony和Harmony平台的开发,但你可以通过以下几种方式将鸿蒙应用集成到React Native项目中:A. 使用WebView。

2501_92093170的博客 1150

SimpleMindMap 完整教程:5 步搭出自用思维导图,8 种布局覆盖 3 类高频任务

评审会散场,桌上只剩十几个零散关键词,你不想再打开 PPT 硬凑。SimpleMindMap(思绪思维导图)就是一个开源的 Web 思维导图:`simple-mind-map/` 是无框架依赖的 MIT 内核库,`web/` 是套在上面的 Vue 2 + ElementUI 完整应用,clone 下来起个开发服务器,就能读写本地文件、画完即导出。 ## 🚀 3 分钟跑起本地版本 装好 Nod

gitblog_00971的博客 431

大语言模型原理与编程实践:从Transformer到LoRA微调

大语言模型(LLM)的核心在于理解其底层原理与工程实现的深度耦合。Transformer架构通过多头自注意力、LayerNorm和残差连接解决了长程依赖与梯度传播难题;Decoder-Only设计则天然适配自回归生成任务,并支撑KV缓存等关键推理优化技术。这些原理直接决定模型选型、训练稳定性与部署效率。在实践中,LoRA微调、INT4量化、Tokenizer定制和梯度调试等环节,无一不依赖对注意力缩放因子、因果掩码、Pre-LN结构等基础机制的准确把握。本文聚焦可落地的LLM工程链路,覆盖从手写Attent

weixin_30650039的博客 540

HandyControl WPF导航控件速查:3个控件、3步跑通

HandyControl是补"WPF原生标签页不能拖拽和关闭、侧边菜单做不了层级"这类问题的WPF控件库。本文只讲src/Shared里最常用的3个导航控件。 ## 先看图,再拆原理 [![HandyControl WPF导航控件Demo页面效果](https://raw.gitcode.com/gh_mirrors/ha/HandyControl/raw/e9ad3d701b90e72439

gitblog_00009的博客 728
上一篇: 《Head First Python》第四章--持久存储
下一篇: 《Head First Python》第六章--定制数据对象
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值