【Python零基础入门】第6篇:Python字符串入门:创建、索引与切片

🎯 学习目标

深入掌握Python字符串的创建方式,理解正向和反向索引机制,熟练使用切片操作提取子字符串,为后续文本处理打下坚实基础!


📖 导语

在前面的学习中,我们已经掌握了Python的数字类型。但在实际编程中,字符串才是使用最频繁的数据类型之一。

无论是处理用户输入、读取文件内容、网络数据传输,还是生成报告、日志记录,都离不开字符串操作。据统计,在实际项目中,字符串操作占据了代码的30%以上!

今天,我们将深入学习Python字符串的核心知识:如何创建字符串?如何访问字符串中的字符?如何截取子字符串?这些都是每个Python程序员必须掌握的基本功。


一、字符串的创建

1.1 使用引号创建字符串

Python中可以使用三种引号创建字符串:

单引号字符串:

name = Alice

city = 北京

print(name) 输出: Alice

双引号字符串:

message = Hello World

greeting = 你好,Python!

print(message) 输出: Hello World

三引号字符串(多行):

poem = 床前明月光,

疑是地上霜。

举头望明月,

低头思故乡。

print(poem)

1.2 引号的选择技巧

当字符串中包含某种引号时,可以使用另一种引号来包裹:

**字符串中包含单引号:**使用双引号包裹

sentence = It is a nice day today!

**字符串中包含双引号:**使用单引号包裹

quote = He said Hello to me.

**使用转义字符:**在引号前加反斜杠

text = It is a great day!

1.3 空字符串与空白字符串

**空字符串:**不包含任何字符,长度为0

empty = 空字符串

print(len(empty)) 输出: 0

print(bool(empty)) 输出: False

**空白字符串:**包含空格、制表符或换行符,长度不为0

spaces = 三个空格

print(len(spaces)) 输出: 3

使用str()函数创建字符串:

num_str = str(123)

float_str = str(3.14)

bool_str = str(True)

print(num_str) 输出: 123

print(float_str) 输出: 3.14

print(bool_str) 输出: True


二、字符串的索引

2.1 什么是索引

字符串中的每个字符都有一个编号,称为索引(index)。Python的索引从0开始,这意味着第一个字符的索引是0,第二个是1,以此类推。

例如字符串 "Python":

| 字符 | P | y | t | h | o | n |
| 正向索引 | 0 | 1 | 2 | 3 | 4 | 5 |

反向索引 -6 -5 -4 -3 -2 -1

2.2 正向索引

使用正数索引从字符串开头访问字符:

s = Python

print(s[0]) 输出: P(第一个字符)

print(s[1]) 输出: y(第二个字符)

print(s[5]) 输出: n(第六个字符)

2.3 反向索引

使用负数索引从字符串末尾访问字符,-1表示最后一个字符:

s = Python

print(s[-1]) 输出: n(最后一个字符)

print(s[-2]) 输出: o(倒数第二个字符)

print(s[-6]) 输出: P(第一个字符)

2.4 索引越界错误

如果索引超出范围,Python会抛出IndexError:

s = Hi

print(s[5]) 错误!IndexError: string index out of range

**如何避免越界?**使用len()函数先获取长度:

s = Hello World

length = len(s) 输出: 11

最后一个字符的索引 = length - 1 = 10

2.5 获取字符串长度

使用len()函数获取字符串长度:

s = Hello World

print(len(s)) 输出: 11(包含空格)

empty =

print(len(empty)) 输出: 0

**实战技巧:**获取最后一个字符

s = Python

last_char = s[len(s) - 1] 传统方法

last_char = s[-1] 推荐方法(更简洁)


三、字符串的切片

3.1 什么是切片

**切片(Slicing)**用于获取字符串的一部分(子字符串)。切片操作非常强大且灵活,是Python中处理字符串的核心技巧之一。

**基本语法:**string[start:end:step]

参数 说明 默认值
start 起始索引(包含) 0
end 结束索引(不包含) 字符串长度
step 步长(每隔几个字符取一个) 1

3.2 基本切片操作

s = Hello World

print(s[0:5]) 输出: Hello(索引0到4)

print(s[6:11]) 输出: World(索引6到10)

print(s[0:11]) 输出: Hello World(整个字符串)

3.3 省略start或end

**省略start:**从字符串开头开始

s = Hello World

print(s[:5]) 输出: Hello(等同于s[0:5])

**省略end:**到字符串末尾结束

print(s[6:]) 输出: World(等同于s[6:11])

**同时省略:**复制整个字符串

print(s[:]) 输出: Hello World(创建副本)

3.4 使用步长

step表示每隔几个字符取一个:

s = abcdefghij

print(s[::2]) 输出: acegj(每隔一个字符)

print(s[1::2]) 输出: bdfh(从索引1开始,每隔一个)

print(s[::3]) 输出: adgj(每隔两个字符)

3.5 反转字符串

使用负数步长可以反转字符串:

s = Python

print(s[::-1]) 输出: nohtyP(反转整个字符串)

print(s[5:1:-1]) 输出: noht(从索引5到2,反向)

print(s[::-2]) 输出: nhy(反转后每隔一个)

3.6 切片的优势:不会越界

与索引不同,切片不会越界,超出范围会自动处理:

s = Hi

print(s[0:100]) 输出: Hi(不会报错,自动截断)

print(s[5:10]) 输出: (空字符串,不会报错)

print(s[-100:100]) 输出: Hi(不会报错)

3.7 切片实战示例

示例1:提取文件名和扩展名

filename = document.txt

name = filename[:-4] 输出: document

extension = filename[-3:] 输出: txt

示例2:提取日期中的年月日

date = 2026-04-27

year = date[:4] 输出: 2026

month = date[5:7] 输出: 04

day = date[8:] 输出: 27


四、字符串的基本方法

4.1 大小写转换

s = Hello World

print(s.upper()) 输出: HELLO WORLD(全大写)

print(s.lower()) 输出: hello world(全小写)

print(s.title()) 输出: Hello World(每个单词首字母大写)

print(s.capitalize()) 输出: Hello world(句首大写)

print(s.swapcase()) 输出: hELLO wORLD(大小写互换)

4.2 查找和替换

s = Hello World, Hello Python

查找子串:

print(s.find(Hello)) 输出: 0(返回第一次出现的索引)

print(s.find(Hello, 5)) 输出: 13(从索引5开始查找)

print(s.rfind(Hello)) 输出: 13(从右边开始查找)

统计出现次数:

print(s.count(Hello)) 输出: 2

print(s.count(l)) 输出: 4

替换子串:

print(s.replace(Hello, Hi)) 输出: Hi World, Hi Python

print(s.replace(Hello, Hi, 1)) 输出: Hi World, Hello Python(只替换1次)

4.3 去除空白字符

s = Hello World

print(s.strip()) 输出: Hello World(去除两端空白)

print(s.lstrip()) 输出: Hello World (去除左边空白)

print(s.rstrip()) 输出: Hello World(去除右边空白)

去除指定字符:

s2 = xxHello Worldxx

print(s2.strip(x)) 输出: Hello World

s3 = ###Python###

print(s3.strip(#)) 输出: Python

4.4 分割和连接

s = apple,banana,orange

分割字符串:

fruits = s.split(,)

print(fruits) 输出: [apple, banana, orange](返回列表)

指定最大分割次数:

s2 = a,b,c,d,e

print(s2.split(,, 2)) 输出: [a, b, c,d,e]

连接字符串:

fruits = [apple, banana, orange]

new_s = -.join(fruits)

print(new_s) 输出: apple-banana-orange

sentence = .join(fruits)

print(sentence) 输出: apple banana orange

4.5 判断方法

s = Hello123

print(s.startswith(Hello)) 输出: True(是否以某字符串开头)

print(s.endswith(123)) 输出: True(是否以某字符串结尾)

print(s.isalpha()) 输出: False(是否全是字母)

print(s.isdigit()) 输出: False(是否全是数字)

print(s.isalnum()) 输出: True(是否全是字母或数字)

print(s.isspace()) 输出: False(是否全是空白字符)

更多判断方法:

print(HELLO.isupper()) 输出: True(是否全大写)

print(hello.islower()) 输出: True(是否全小写)

print(Hello World.istitle()) 输出: True(是否标题格式)


五、字符串的不可变性

5.1 什么是不可变性

在Python中,字符串是**不可变(Immutable)**类型,这意味着一旦创建,字符串的内容就不能被修改。任何对字符串的"修改"操作实际上都是创建了一个新的字符串。

s = Hello

s[0] = h 错误!TypeError

**正确的做法:**创建新字符串

s = h + s[1:]

print(s) 输出: hello

5.2 不可变性的优点

**1. 安全性:**字符串不会被意外修改,数据更加安全

**2. 哈希性:**可作为字典的键(可哈希)

**3. 共享性:**相同的字符串可以共享存储,节省内存

**4. 线程安全:**多线程环境下不需要同步

5.3 修改字符串的正确方式

由于字符串不可变,"修改"实际上是创建新字符串:

s = Hello World

替换子串:

s = s.replace(World, Python)

print(s) 输出: Hello Python

拼接字符串:

s = s + !

print(s) 输出: Hello Python!

使用join()高效拼接:

words = [Hello, Python, World]

sentence = .join(words)

print(sentence) 输出: Hello Python World

避免使用+进行大量拼接:

result =

for i in range(1000):

result += str(i) 效率低!

推荐:

parts = []

for i in range(1000):

parts.append(str(i))

result = .join(parts) 效率高!


六、字符串格式化

6.1 使用 % 格式化(旧式)

这是Python早期的格式化方式,类似C语言的printf:

name = Alice

age = 20

print(My name is %s, I am %d years old % (name, age))

常用格式化符号:

符号 含义 示例
%s 字符串 Hello
%d 整数 42
%f 浮点数 3.14
%.2f 保留2位小数 3.14
%x 十六进制 2a

6.2 使用 format() 方法

Python 2.6+引入的格式化方式,更加灵活:

name = Alice

age = 20

按位置:

print(My name is {}, I am {} years old.format(name, age))

按索引:

print(My name is {0}, I am {1} years old.format(name, age))

print(I am {1}, My name is {0}.format(name, age))

按关键字:

print(My name is {name}, I am {age} years old.format(name=Bob, age=25))

格式控制:

pi = 3.1415926

print({:.2f}.format(pi)) 输出: 3.14

print({:10}.format(pi)) 输出: 3.14(宽度10,右对齐)

print({:<10}.format(pi)) 输出: 3.14 (宽度10,左对齐)

print({:^10}.format(pi)) 输出: 3.14 (宽度10,居中)

6.3 使用 f-string(推荐,Python 3.6+)

f-string是Python 3.6+引入的格式化方式,语法最简洁,性能最好:

name = Alice

age = 20

print(fMy name is {name}, I am {age} years old)

在表达式中计算:

print(fNext year I will be {age + 1} years old)

print(fPi equals {3.14159:.2f})

格式化数字:

num = 1234567

print(f{num:,}) 输出: 1,234,567(千位分隔)

print(f{num:08d}) 输出: 01234567(补零填充)

percentage = 0.8567

print(f{percentage:.2%}) 输出: 85.67%


七、实战案例

7.1 邮箱验证器

验证邮箱格式的基本规则:

def validate_email(email):

if @ not in email:

return False, 邮箱必须包含@符号

parts = email.split(@)

if len(parts) != 2:

return False, 邮箱格式不正确

local, domain = parts

if not local or not domain:

return False, @前后不能为空

if . not in domain:

return False, 域名必须包含.

return True, 邮箱格式正确

print(validate_email(test@example.com))

print(validate_email(invalid-email))

7.2 回文判断器

判断字符串是否为回文(正读反读相同):

def is_palindrome(s):

去除空格并转为小写

s = s.lower().replace( , )

比较原字符串和反转后的字符串

return s == s[::-1]

print(is_palindrome(A man a plan a canal Panama)) True

print(is_palindrome(Hello)) False

print(is_palindrome(上海自来水来自海上)) True

7.3 密码强度检测器

评估密码的复杂程度:

def check_password_strength(password):

score = 0

remarks = []

if len(password) >= 8:

score += 1

else:

remarks.append(密码长度应至少8位)

if any(c.isupper() for c in password):

score += 1

else:

remarks.append(应包含大写字母)

if any(c.islower() for c in password):

score += 1

else:

remarks.append(应包含小写字母)

if any(c.isdigit() for c in password):

score += 1

else:

remarks.append(应包含数字)

if any(not c.isalnum() for c in password):

score += 1

else:

remarks.append(应包含特殊字符)

levels = [非常弱, 弱, 中等, 强, 非常强, 完美]

return levels[score], remarks

strength, tips = check_password_strength(Abc123!@#)

print(f密码强度:{strength})

if tips:

print(改进建议:, tips)

7.4 文本统计工具

统计文本的各种信息

7.5 姓名格式化工具

格式化姓名显示

7.6 敏感词过滤器

简单的文本内容过滤


八、小结

今天我们深入学习了Python字符串的核心知识:

字符串的创建:单引号、双引号、三引号的使用场景

字符串的索引:正向索引(从0开始)和反向索引(从-1开始)

字符串的切片:基本语法[start:end:step],灵活运用切片提取子串

字符串的方法:大小写转换、查找替换、去除空白、分割连接、判断方法

字符串的不可变性:理解不可变性的意义,掌握正确的修改方式

字符串格式化:%、format()、f-string三种格式化方式

实战案例:邮箱验证、回文判断、密码检测、文本统计、姓名格式化等

字符串是Python编程中最重要的数据类型之一,熟练掌握字符串操作是每个Python程序员的必修课。通过今天的学习,相信你已经掌握了字符串的核心技能,为后续的文本处理、数据分析、Web开发等打下了坚实的基础。

学习建议:

  1. 多动手实践,尝试用不同的方法解决同一个问题

  2. 熟记常用的字符串方法,提高编码效率

  3. 理解字符串的不可变性,避免常见的编程错误

  4. 优先使用f-string进行字符串格式化,代码更简洁


九、课后练习

练习1:基础索引和切片

给定字符串 s = Python Programming

  1. 获取第3个字符(索引为2)

  2. 获取最后3个字符

  3. 获取 Python 子串

  4. 将字符串反转

  5. 每隔一个字符取一个

练习2:字符串方法练习

给定字符串 s = Hello, World!

  1. 去除两端空白

  2. 转换为全大写

  3. 将 World 替换为 Python

  4. 按逗号分割成列表

  5. 判断是否以 Hello 开头

练习3:编写函数

编写一个函数 is_palindrome(s),接收一个字符串,如果是回文返回True,否则返回False。要求忽略大小写和空格。

练习4:文本处理

给定一段文本,统计以下信息:

  1. 有多少个句子(以。!?结尾)

  2. 有多少个单词(以空格分隔)

  3. 哪个字母出现次数最多(忽略大小写)

练习5:格式化输出

编写程序,接收用户输入的姓名、年龄、成绩,输出格式化的学生信息表,要求:

  • 姓名左对齐,宽度15

  • 年龄右对齐,宽度5

  • 成绩保留2位小数,居中,宽度10

练习6:挑战题

编写一个函数,实现简单的Markdown解析器,将以下格式的文本转换为HTML:

  • 标题 转换为 h1 标签

  • 标题 转换为 h2 标签

  • **粗体** 转换为 b 标签

  • *斜体* 转换为 i 标签


十、下篇预告

第7篇:《Python字符串方法大全:常用操作一网打尽》

在下一篇中,我们将继续深入学习字符串的更多内容:

  • 字符串编码与解码:ASCII、UTF-8、GBK等

  • 正则表达式基础:re模块的使用

  • 字符串的高级操作技巧

  • 字符串性能优化建议

  • 更多实战案例和项目

敬请期待!


📌 系列文章目录:点击关注,持续更新中...


如果觉得有帮助,请点赞 👍 + 收藏 ⭐ + 关注 ❤️

你的支持是我持续创作的动力!


本文为本系列第6篇,带你从零基础到Python实战!

相关推荐
人道领域2 小时前
【Redis实战篇 | Day04】Lua原子性优化Redis分布式锁:解决线程安全问题
java·开发语言·redis·性能优化
pele2 小时前
如何判断 interface{} 是否为指针类型
jvm·数据库·python
测绘第一深情2 小时前
租用GPU云服务器进行深度学习(AutoDL,超保姆级,适用新手)
数据结构·人工智能·经验分享·python·深度学习·算法·计算机视觉
步辞2 小时前
Redis如何控制只读从库的安全_配置replica-read-only防止从节点数据被意外篡改
jvm·数据库·python
C语言小火车2 小时前
2026年C++后端开发面试题
java·开发语言·面试
Mr. zhihao2 小时前
深入理解 ReAct 循环:从 LLM 决策到工具执行的完整闭环
python·ai·react
froginwe112 小时前
TCP/IP 协议:网络通信的基石
开发语言
小龙报2 小时前
【数据结构与算法】一文拿捏链式二叉树:遍历 + 统计 + 层序 + 完全树
java·c语言·开发语言·c++·人工智能·语言模型·visual studio
2403_883261092 小时前
SQL视图数据不实时怎么办_利用SQL触发器与视图联动方案
jvm·数据库·python