day 24 元组和OS模块

article/2025/9/6 21:38:38

一、元组

元组(Tuple)是 Python 中一种不可变的序列数据类型。元组一旦创建,其元素不能被修改、删除或添加。这一特性使得元组在需要保护数据不被意外更改的场景中非常有用,比如作为字典的键或在多线程环境中共享数据。

1、元组的创建

使用括号创建:可以通过在括号内放置元素,以逗号分隔来创建元组。例如:

my_tuple1 = (1, 2, 3)
my_tuple2 = ('a', 'b', 'c')
my_tuple3 = (1, 'hello', 3.14, [4, 5]) 

元组可以包含不同类型的元素,如 my_tuple3 中同时包含了整数、字符串、浮点数和列表。

省略括号创建:在创建元组时,括号是可选的,只要使用逗号分隔元素即可。例如:

my_tuple4 = 10, 20, 'thirty' # 逗号是关键
print(my_tuple4)
print(type(my_tuple4)) # 看看它的类型
# 输出:
(10, 20, 'thirty')
<class 'tuple'>

创建空元组:可以使用空括号 () 或 tuple() 函数来创建空元组。例如:

empty_tuple = ()
empty_tuple2 = tuple()

2、元组的索引

正向索引:元组的索引从 0 开始,通过索引值可以访问元组中的单个元素。例如:

my_tuple = ('P', 'y', 't', 'h', 'o', 'n')
print(my_tuple[0])  # 输出 'P',访问第一个元素
print(my_tuple[2])  # 输出 't',访问第三个元素

反向索引:也可以使用负数进行反向索引,从 -1 开始表示最后一个元素。例如:

print(my_tuple[-1]) # 输出 'n',访问最后一个元素

3、元组的切片

基本切片:切片操作允许从元组中获取一个子元组。切片语法是 my_tuple[start:stop:step]其中 start 是起始索引(包含),stop 是结束索引(不包含),step 是步长(可选,默认为 1)。例如:

my_tuple = (0, 1, 2, 3, 4, 5)
print(my_tuple[1:4])  # 输出 (1, 2, 3),从索引 1 到 3 (不包括 4)

省略起始或结束索引:如果省略 start,切片将从元组开头开始;如果省略 stop,切片将一直到元组末尾。例如:

print(my_tuple[:3])   # 输出 (0, 1, 2),从开头到索引 2
print(my_tuple[3:])   # 输出 (3, 4, 5),从索引 3 到结尾

指定步长:通过指定 step,可以每隔一定数量的元素获取一个。例如:

print(my_tuple[::2])  # 输出 (0, 2, 4),每隔一个元素取一个

 step 为负数时,可以实现反向切片,例如 my_tuple[::-1] 将返回元组的反转版本。

二、pipeline

1、输入的结构

 scikit - learn 库中,pipeline类用于构建机器学习工作流程,将多个数据处理步骤和机器学习模型按顺序连接起来。pipeline类接收的是一个包含多个小元组的列表作为输入:

from sklearn.pipeline import Pipeline
Pipeline(steps, memory=None, verbose=False)
  • steps:关键参数,是一个包含多个元组的列表。
    • 列表 []: 定义了步骤执行的先后顺序(因为列表是有序的数据结构)。Pipeline 会按照列表中的顺序依次处理数据。并且由于列表的可修改性,可以灵活调整数据处理步骤。
    • 元组 (): 用于将步骤的名称和实际执行数据转换或模型训练的处理对象捆绑在一起,步骤名称(字符串)用于标识该步骤,方便后续引用和参数设置。
  • memory:可选参数,用于缓存 Pipeline 中步骤的计算结果,以提高计算效率。可传入一个目录路径字符串,Pipeline 将在该目录下缓存数据。None(默认值)则不进行缓存。如:
pipeline = Pipeline(steps, memory='cache_dir')
  • verbose:可选参数,布尔值。如果设置为 TruePipeline 在执行每个步骤时会打印详细信息,有助于调试和监控流程执行情况;默认值为 False,不打印详细信息。

2、代码框架

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score# 1. 加载数据
iris = load_iris()
X = iris.data
y = iris.target# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 3. 构建管道
pipeline = Pipeline([('scaler', StandardScaler()),('logreg', LogisticRegression())
])# 4. 训练模型
pipeline.fit(X_train, y_train)# 5. 预测
y_pred = pipeline.predict(X_test)# 6. 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在测试集上的准确率: {accuracy:.2f}")

3、为什么设计为类而不是函数?

1. 封装与状态管理

封装性:类能将数据(属性)和操作(方法)捆绑在一起。Pipeline 类封装了多个数据处理步骤和机器学习模型以及执行逻辑。而函数通常只专注于执行任务,不太容易实现综合性的封装。

状态管理Pipeline 类可以通过内部属性(如 mean_ )来管理状态(例如,StandardScaler 类在 fit 过程中计算的均值和标准差)。而调用函数是独立操作,难以在多个步骤间共享和维护。

2. 面向对象编程与代码复用

面向对象scikit - learn 库整体采用面向对象编程范式,Pipeline 作为其中的一部分,设计为类与整个库的架构保持一致,这样 Pipeline 类可以很方便地进行集成。

代码复用:类可以通过继承和组合的方式实现代码复用。Pipeline 类可以组合多个不同的处理类(如数据预处理类和模型类)使得它具有很高的灵活性和复用性。

3. 方法和接口的统一

统一接口Pipeline 类定义了一系列统一的方法,如 fittransformfit_transformpredict 等,这些方法与 scikit - learn 中其他模型和转换器类的接口保持一致。

链式调用:作为类,Pipeline 对象支持方法的链式调用,能清晰表达数据从训练到预测的整个流程。如pipeline.fit(X_train, y_train).predict(X_test)。而函数实现需要额外设计处理。

4. 参数管理与灵活性

参数设置与管理Pipeline 类提供了方便的参数设置和管理机制。通过 set_params 方法可以轻松设置 Pipeline 中各步骤的参数,并且(如 step_name__param_name)参数名通过步骤名称和参数名称的组合来指定的方式非常直观且易理解。

动态调整:在实际应用中,可能需要根据不同的情况动态调整 Pipeline 的结构或参数。作为类,Pipeline 对象可以在运行时根据条件进行修改,例如添加或删除步骤、调整参数等。

三、可迭代对象

可迭代对象是能一次返回其成员,可在循环(如 for 循环)中遍历的对象。

例如,对于列表my_list = [1, 2, 3],可以通过for num in my_list:这样的循环来遍历其中的元素。Python中有很多内置的可迭代对象:

序列类型listtuplestrrange,它们的元素有序且可通过索引访问。

集合类型set集合中的元素无序且唯一,遍历集合时会按某种内部顺序依次返回元素。

字典类型默认情况下,迭代字典时返回键(keys)。不过字典也可以通过my_dict.values()迭代值,通过my_dict.items()迭代键值对。

文件对象:例如,打开一个文件file = open('example.txt', 'r'),可以使用for line in file:逐行读取文件内容。读取完毕后,记得关闭文件file.close()

生成器:生成器是一种特殊的可迭代对象,它并不立即生成所有的值,而是按需生成,从而节省内存。比如使用生成器表达式(i for i in range(5))

迭代器:迭代器本身也是可迭代对象。迭代器遵循迭代器协议,具有__next__方法,可逐个返回元素,当没有元素可返回时引发StopIteration异常。

四、OS模块

# os是系统内置模块,无需安装
import os# 获取当前工作目录的绝对路径(get current working directory )
os.getcwd() # 获取当前工作目录下的文件列表(list directory )
os.listdir() # 使用 r'' 原始字符串就不需要写双反斜杠 \\,因为\会涉及到转义问题
path_a = r'C:\Users\YourUsername\Documents' 
path_b = 'MyProjectData'
file = 'results.csv'# os.path.join用于将多个路径组件拼接成完整的路径并会根据当前操作系统自动使用合适的路径分割符
file_path = os.path.join(path_a , path_b, file)
file_path
# 输出:'C:\\Users\\YourUsername\\Documents\\MyProjectData\\results.csv'# 返回环境变量名和对应的值,形式像字典中的键值对
os.environ
# os.environ是可迭代对象
for variable_name, value in os.environ.items():print(f"{variable_name}={value}")
print(f"\n--- 总共检测到 {len(os.environ)} 个环境变量 ---")

OS.walk()

os.walk() 是 Python os 模块里用于遍历目录树的强大函数:

1. 函数定义与参数

os.walk(top, topdown=True, onerror=None, followlinks=False)

  • top:必选参数,指定要开始遍历的目录路径,可以是绝对路径或相对路径。
  • topdown:可选参数,默认为 True。当 topdown=True 时,函数会先遍历顶层目录,然后递归遍历子目录;若设为 False,则先遍历子目录,最后才遍历顶层目录。
  • onerror:可选参数,默认值为 None。如果在遍历过程中发生错误,且你提供了一个错误处理函数给 onerror,那么该函数会被调用。若设为 None,遇到错误时会直接引发异常中断遍历。
  • followlinks:可选参数,默认为 False。在遍历目录树时,如果遇到符号链接(类似快捷方式),followlinks=False 时,符号链接指向的目录不会被遍历。

2. 返回值

os.walk() 是一个生成器函数,不会一次性返回整个目录树的所有信息,而是按需逐目录生成包含三个元素的元组 (dirpath, dirnames, filenames):

  • dirpath:一个字符串,表示当前正在访问的目录的完整路径。
  • dirnames:一个列表,包含 dirpath 目录下所有子目录的名称,但不包括表示当前目录的 . 和表示上级目录的 ..
  • filenames:一个列表,包含 dirpath 目录下所有非目录文件的名称。

3. 深度优先遍历策略

先复习一下深度优先遍历:

import osstart_directory = os.getcwd() 
print(f"--- 开始遍历目录: {start_directory} ---")
for dirpath, dirnames, filenames in os.walk(start_directory):print(f"  当前访问目录 (dirpath): {dirpath}")print(f"  子目录列表 (dirnames): {dirnames}")print(f"  文件列表 (filenames): {filenames}")# 打印文件完整路径
print("--- 文件完整路径: ---")full_path = os.path.join(dirpath, filename)print(f"      - {full_path}")

为什么学这个嘞? 

在云服务器(通常基于 Linux 系统)上运行代码时,不像 Windows 系统有图形化界面能直观查看目录结构,但借助 Python 的 os 模块,就可以很方便地在代码中获取相关信息啦

这是kaggle平台官方提供的代码头,就是方便查看文件情况。 

@浙大疏锦行


http://www.hkcw.cn/article/ZcSoOFwtbC.shtml

相关文章

python 制作复杂表格报告

python 制作复杂表格报告 最近用&#xff4f;&#xff44;&#xff4f;&#xff4f;集成检测系统&#xff0c;有一复杂表格报告需要处理&#xff0c;即要用到数据库中详细实验信息&#xff0c;检测项格式也不统一&#xff0c;在word中需要有宣然&#xff0c;有列合并&#xff…

unity星空运动

// Upgrade NOTE: replaced ‘_Object2World’ with ‘unity_ObjectToWorld’ // Upgrade NOTE: replaced ‘mul(UNITY_MATRIX_MVP,)’ with UnityObjectToClipPos()’ Shader “Unlit/Texture_046” { Properties { _F(“F”,range(1,10)) 4 _MainTex(“MainTex”,2D) “”…

【电拖自控】转速检测数字测速(脉冲计数测速)

电力拖动自动控制系统第4版上海大学阮毅 &#xff08;脉冲计数测速可以用光电式编码器或霍尔编码器。&#xff09; 旋转编码器 光电式旋转编码器是检测转速或转角的元件。 旋转编码器可分为绝对式和增量式两种。绝对式常用于检测转角&#xff0c;增量式用于测转速。 增量式…

软考-系统架构设计师-第十六章 层次式架构设计理论与实践

层次式架构设计理论与实践 16.2 表现层框架设计16.3 中间层框架设计16.4 数据访问层设计16.5 数据架构规划与设计16.6 物联网层次架构设计 软件体系结构为软件系统提供了结构、行为和属性的高级抽象&#xff0c;由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及…

ZigBee 协议:开启物联网低功耗通信新时代

在物联网蓬勃发展的时代&#xff0c;无线通信技术犹如连接万物的桥梁&#xff0c;而 ZigBee 协议以其独特的优势&#xff0c;在众多通信协议中脱颖而出&#xff0c;成为构建低功耗、可靠物联网网络的关键技术之一。 一、ZigBee 协议的起源与发展 ZigBee 这个名字充满了自然的灵…

计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

计算机网络体系结构 从本此开始&#xff0c;我们就要开始介绍有关计算机网络体系结构的知识了。内容包括&#xff1a; 常见的计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络体系结构的设计思想 举例说明及专用术语 计算机网络体系结构是计算机网络课程中…

React---day4

3、React脚手架 生成的脚手架的目录结构 什么是PWA PWA全称Progressive Web App&#xff0c;即渐进式WEB应用&#xff1b;一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用&#xff1b;随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线…

初识高通平台收货总结(比较杂)

1、CameraHAL3数据流向 CamraHAL3数据流向图&#xff1a; Camera数据从sensor出来&#xff0c;首先会经过IFE,然后分预览/视频和拍照2种情况。 如果是预览或者录像&#xff0c;是先经过IPE处理&#xff0c;最后输出到显示。 如果是拍照&#xff0c;则是先经过BSP处理&#x…

小牛电动NLT Citi 2025 登场:重塑电自标准,媲美电摩性能

在电动车的世界里&#xff0c;小牛电动一直是创新与品质的代名词。2025 年&#xff0c;小牛 NLT Citi 震撼登场&#xff0c;重新定义了电动自行车的标准&#xff0c;带来前所未有的电摩级体验。 经典大牛电自版全面升级&#xff0c;NLT Citi 完美继承了小牛智能超满配的实力基…

下载jdk教程

首先登录Oracle账号&#xff0c;感谢一下老哥的账号分享 Oracle账号分享_oracle共享账号-CSDN博客 如下有三个版本的jdk下载 推荐下载中间那个 你可以根据自己的需求选择合适的下载方式&#xff0c;下面是每个选项的简要说明&#xff1a; 1. x64 Compressed Archiv…

中国头盔护具展在杭州举办合适

2024年&#xff0c;浙江的人均GDP超过2.5万美元&#xff0c;人均收入和人均消费更是全国第一&#xff1b;省外人口实际净流入达45.4万人&#xff0c;居各省份第一。杭州是浙江省会是中国第八座“两万亿之城”之一‌&#xff0c;城区总人口突破千万&#xff0c;实现从特大城市到…

SpringCloud

微服务 一&#xff1a;MP补充&#xff1a; 1.1.注解&#xff1a; 1.2.配置&#xff1a; 1.3.条件构造器&#xff1a; 1.4.自定义sql&#xff1a; 在有些业务中&#xff0c;需要我们手动来编写部分sql语句&#xff0c;但是在开发业务中&#xff0c;sql语句是不能直接暴露在业…

基于大数据的个性化购房推荐系统设计与实现(源码+定制+开发)面向房产电商的智能购房推荐与数据可视化系统 基于Spark与Hive的房源数据挖掘与推荐系统设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)

这里写目录标题 0、驱动pytorch环境安装验证1.window环境2.Mac Apple M芯片环境 1、Nvidia显卡驱动、CUDA、cuDNN关系汇总1**1. Nvidia显卡驱动&#xff08;Graphics Driver&#xff09;****2. CUDA&#xff08;Compute Unified Device Architecture&#xff09;****3. cuDNN&a…

Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)

Ubuntu 22.04 上安装 PostgreSQL&#xff08;使用官方 APT 源&#xff09; 步骤 1&#xff1a;更新系统 sudo apt update sudo apt upgrade -y步骤 2&#xff1a;添加 PostgreSQL 官方仓库 # 安装仓库管理工具 sudo apt install wget ca-certificates gnupg lsb-release -y#…

游戏盾在非游戏行业的应用实践与价值分析

游戏盾最初是为应对游戏行业的高并发、复杂协议攻击&#xff08;如DDoS、CC攻击&#xff09;而设计的网络安全解决方案&#xff0c;但随着技术演进&#xff0c;其分布式架构、智能调度和协议解析能力逐渐被扩展至其他高流量、高安全需求的非游戏领域。本文将结合实际案例&#…

R语言基础| 数据基本管理与操作

上次教程我们已经和大家一起完成了创建数据集的学习&#xff0c;在本次内容里我们将进一步对数据进行管理与操作。 示例展示&#xff08;本节均用它学习&#xff09; leadership <- data.frame(managerc(1,2,3,4,5),datec("10/24/08","10/28/08",&quo…

腾讯云国际站性能调优

全球化业务扩张中&#xff0c;云端性能直接决定用户体验与商业成败。腾讯云国际站通过资源适配、网络优化与存储革新&#xff0c;为企业提供全链路调优方案。 ​​资源精准适配​​ 实例选型需与业务场景深度耦合&#xff0c;计算优化型实例加速AI训练效率3倍&#xff0c;内存…