Python 字符串操作

Python 字符串操作

Python 字符串操作

概述

字符串是编程中最常用的数据类型之一,特别是在文本处理、数据清洗和自然语言处理等领域。掌握字符串操作是Python编程的基础技能。

字符串操作分类

字符串操作

基本操作

常用方法

格式化

编码处理

类型转换

高级操作

索引

切片

长度

大小写转换

查找替换

分割连接

判断方法

百分号格式化

format方法

f-string

编码

解码

数字转字符串

字符串转数字

对齐填充

迭代遍历

代码示例

#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 文件名: string_operations.py 开发思路和开发过程: 1. 首先介绍字符串的基本操作(索引、切片等) 2. 然后演示字符串的常用方法 3. 接着展示字符串格式化方法 4. 最后介绍字符串与其他数据类型的转换 代码功能: 演示Python中字符串的各种操作方法,包括索引、切片、常用方法和格式化等。 """print("=== Python 字符串操作详解 ===\n")# 1. 字符串基本操作print("1. 字符串基本操作:") text ="Hello, Python World!"print(f"原始字符串: '{text}'")# 字符串索引(从0开始)print(f"第一个字符: '{text[0]}'")print(f"最后一个字符: '{text[-1]}'")# 字符串切片 [start:end:step]print(f"前5个字符: '{text[:5]}'")print(f"从第7个字符到最后: '{text[6:]}'")print(f"第7到第12个字符: '{text[6:12]}'")print(f"每隔一个字符: '{text[::2]}'")print(f"反转字符串: '{text[::-1]}'")# 字符串长度print(f"字符串长度: {len(text)}")print()# 2. 字符串常用方法print("2. 字符串常用方法:") sample_text =" Hello, Python! Welcome to the World of Python Programming. "print(f"示例字符串: '{sample_text}'")# 去除空白字符 stripped = sample_text.strip()print(f"去除首尾空白: '{stripped}'")# 大小写转换print(f"全部大写: '{stripped.upper()}'")print(f"全部小写: '{stripped.lower()}'")print(f"首字母大写: '{stripped.capitalize()}'")print(f"每个单词首字母大写: '{stripped.title()}'")# 查找和替换print(f"查找'Python'的位置: {stripped.find('Python')}")print(f"查找最后一个'Python'的位置: {stripped.rfind('Python')}")print(f"'Python'出现的次数: {stripped.count('Python')}")# 替换 replaced = stripped.replace('Python','Java')print(f"将'Python'替换为'Java': '{replaced}'")# 分割和连接 words = stripped.split()print(f"按空格分割: {words}") sentence ="Python,is,awesome" split_by_comma = sentence.split(',')print(f"按逗号分割: {split_by_comma}") joined ='-'.join(words[:4])# 连接前4个单词print(f"用'-'连接前4个单词: '{joined}'")# 判断方法print(f"是否以'Hello'开头: {stripped.startswith('Hello')}")print(f"是否以'Programming.'结尾: {stripped.endswith('Programming.')}")print(f"是否全为字母: {'Hello'.isalpha()}")print(f"是否全为数字: {'123'.isdigit()}")print(f"是否全为字母或数字: {'Hello123'.isalnum()}")print()# 3. 字符串格式化print("3. 字符串格式化:") name ="张三" age =25 city ="北京"# 1. 百分号格式化(老式方法) old_style ="姓名: %s, 年龄: %d, 城市: %s"%(name, age, city)print(f"百分号格式化: {old_style}")# 2. str.format() 方法 format_method ="姓名: {}, 年龄: {}, 城市: {}".format(name, age, city)print(f"format方法: {format_method}")# 3. f-string(推荐方法,Python 3.6+) f_string =f"姓名: {name}, 年龄: {age}, 城市: {city}"print(f"f-string: {f_string}")# 格式说明符 pi =3.141592653589793print(f"π的值(保留2位小数): {pi:.2f}")print(f"π的值(科学计数法): {pi:.2e}") number =42print(f"数字补零(5位): {number:05d}")print()# 4. 字符串编码和解码print("4. 字符串编码和解码:") chinese_text ="你好,世界!"print(f"中文字符串: {chinese_text}")# 编码为bytes encoded = chinese_text.encode('utf-8')print(f"UTF-8编码: {encoded}")# 解码为字符串 decoded = encoded.decode('utf-8')print(f"UTF-8解码: {decoded}")print()# 5. 多行字符串和转义字符print("5. 多行字符串和转义字符:")# 使用转义字符 escape_example ="第一行\n第二行\t制表符\\反斜杠"print("转义字符示例:")print(escape_example)# 使用原始字符串(忽略转义字符) raw_string =r"C:\Users\张三\Documents"print(f"原始字符串: {raw_string}")# 多行字符串 multi_line =""" 这是多行字符串的第一行 这是第二行 这是第三行 """print("多行字符串:")print(multi_line)print()# 6. 字符串与其他数据类型的转换print("6. 字符串与其他数据类型的转换:")# 数字转字符串 num =123.456 num_str =str(num)print(f"数字 {num} 转字符串: '{num_str}'")# 字符串转数字 str_int ="123" str_float ="45.67" converted_int =int(str_int) converted_float =float(str_float)print(f"字符串 '{str_int}' 转整数: {converted_int}")print(f"字符串 '{str_float}' 转浮点数: {converted_float}")# 列表转字符串 my_list =['apple','banana','orange'] list_str =','.join(my_list)print(f"列表 {my_list} 转字符串: '{list_str}'")# 字符串转列表 str_to_list = list_str.split(',')print(f"字符串 '{list_str}' 转列表: {str_to_list}")print()# 7. 字符串的高级操作print("7. 字符串的高级操作:")# 字符串对齐 text ="Python"print(f"居中对齐(20字符): '{text.center(20)}'")print(f"左对齐(20字符): '{text.ljust(20)}'")print(f"右对齐(20字符): '{text.rjust(20)}'")print(f"用*填充: '{text.center(20,'*')}'")# 字符串填充 number ="42"print(f"左侧补零(5位): '{number.zfill(5)}'")# 字符串检查 email ="[email protected]"print(f"邮箱格式检查 '{email}': {'@'in email and'.'in email}")# 字符串迭代 word ="Python"print(f"遍历字符串 '{word}':")for i, char inenumerate(word):print(f" 索引 {i}: '{char}'")print("\n=== 字符串操作详解结束 ===")

字符串处理流程

原始字符串

需要清洗?

去除空白strip

直接处理

需要格式化?

格式化处理

进一步处理

需要分割?

split分割

其他操作

处理分割结果

最终结果

字符串格式化对比

格式化方法语法示例优点缺点
% 格式化"Hello %s" % name兼容性好,适用于旧版本Python不直观,容易出错
format方法"Hello {}".format(name)功能强大,支持位置和命名参数语法稍复杂
f-stringf"Hello {name}"直观易读,性能好需要 Python 3.6+ 版本

学习要点

  1. 掌握基本操作:索引、切片、长度计算
  2. 熟练使用常用方法:大小写转换、查找替换、分割连接等
  3. 理解格式化方法:特别是推荐使用的f-string
  4. 处理编码问题:正确处理中文等非ASCII字符
  5. 掌握类型转换:字符串与其他数据类型的相互转换

实践建议

  1. 运行示例代码,观察各种字符串操作的输出结果
  2. 尝试修改字符串内容,观察结果变化
  3. 练习复杂的字符串处理场景
  4. 在实际项目中应用学到的字符串操作技巧

Read more

新卷-敌情监控-(Java&Python&JS&C++&C)

新卷-敌情监控-(Java&Python&JS&C++&C) 题目描述 H国最近在和M国打仗,H国间谍头子Peter负责监视敌国M的兵力部署情况。M国沿边境线布置了N个营地,Peter的任务就是监视这些营地的兵力部署情况。中央情报局要研究敌情,所以Peter要汇报一段兵营中哪个连续的K个营地驻兵最少之和是多少,可以作为攻击的突破点,例如:“Peter,快汇报第2个营地到第10个营地中H连续的3座兵营人数之和最少”;而且每个营地的人数在不断变化。请你帮Peter设计一个程序,快速计算汇到的结果 输入描述 第一行3个正整数:N K L N(N<=50000),表示敌人营地兵营的数量,每个营地编号为1,2,3...N.K表示连续的兵营数,L表示后续要问的命令数量;接下来有N个正整数,第i个正整数ai代表第i个营地里开始时有ai个人(1<=ai<=50000) 接下来有行有L条命令。命令有3种形式: (1)

By Ne0inhk
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑

C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 友元:“朋友的朋友不是我的朋友”——友元关系不可继承 * 二. 静态成员:“全家共用一份”——继承体系中静态成员的共享性 * 三. 多继承及菱形继承问题:本质特点与解决方案 * 3.1 单继承与多继承模型 * 3.2 菱形继承:虚继承解决“数据冗余”与“二义性” * 3.2.1 菱形继承的坑(未完全解决时) * 3.2.2 虚继承:彻底解决菱形继承问题 * 3.2.3 多继承中指针偏移问题? * 3.3

By Ne0inhk

如何轻松将 Python 英文版切换至中文界面

Python 的“英文版”切换到中文界面,主要取决于你指的到底是哪个部分: * Python 解释器 / 命令行:本身没有界面语言概念(一直是英文提示),但错误信息、帮助文档可以看中文版。 * IDLE(Python 自带的编辑器/Shell):默认英文菜单和提示,最常见需要汉化的地方。 * 第三方 IDE(如 PyCharm、VS Code):这些有官方中文支持。 * 官方文档:有完整的中文翻译。 下面按场景给你最简单、有效的切换方法(2026 年最新实用方案)。 1. 最常见需求:把 IDLE 切换成中文界面(推荐方式) 目前(Python 3.9 ~ 3.14)最简单、效果最好的方法是用 pip 安装社区维护的汉化包 idcn。 步骤(1

By Ne0inhk
【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

【C++ Qt】网络编程(QUdpSocket、QTcpSocket、Http)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论 : 本章将提到Qt中的网络部分,在看这篇文章之前需要有一定的网络基础也就是TCP/HTTP、本篇文章主要讲到的是Qt中基础的Udp、Tcp、Http的使用方法,并附有了多个小demo方便实操练习,并且其中还在每章最后进行了小总结回顾重要接口和函数方便回顾。 ———————— 早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。 网络编程主要依赖于操作系统提供的Socket API。需要注意的是,C++标准库本身并未封装网络编程相关的API。 关于Qt网络编程的几个要点: 1. 网络应用开发本质上是编写应用层代码,需要传输层协议(如TCP/UDP)的支持 2. 为此,Qt提供了两套专门的网络编程API(QUDPSocket和QTcpSocket) 3. 使用Qt网络编程API时,需先在.pro文件中添加network模块 4. 之前学习的Qt控件和核心功能都属于QtCore模块(默认已包含) 为什么Qt要划分出这些模块呢? Qt 本身是一个非常庞

By Ne0inhk