查看全课大纲(第 22 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 51.Counter 如何快速统计元素出现次数?

字符串怎么定义、拼接和操作?

约 18 分钟

小象实战讲义 · Python 编程从入门到实践

在学习了数字和列表之后,本节我们进入另一种基础且无处不在的数据类型:字符串。无论是处理用户输入、读取文件还是输出信息,都离不开字符串。学完本节,你将掌握字符串的定义、拼接、访问内部字符以及使用其内置方法完成常见任务。本节是第3章《更多数据结构》的开篇,承接了之前对基本数据结构的理解,并为后续学习字典、元组等更复杂结构打下基础。

💡 核心导读

  • 定义与拼接:用单/双引号定义字符串,用加号 + 或格式化方法进行拼接。
  • 访问与切片:通过下标访问单个字符,使用切片语法获取子串。
  • 常用方法:使用 .split()、.format()、.upper() 等方法处理和转换字符串。
  • 如何探索:学会利用 IDE 补全、dir() 函数和官方文档来查找和使用更多字符串方法。

字符串的定义与拼接

字符串是用于表示文本的数据类型。在 Python 中,定义字符串主要有两种方式:使用单引号 ' 或双引号 " 将文本内容括起来。

将两个或多个字符串连接成一个新字符串的操作称为字符串拼接。最直接的方法是使用加号 +;另一种更灵活的方式是字符串格式化,它允许你将变量值嵌入到一个固定的字符串模板中。

# 使用双引号或单引号定义字符串
s1 = "hello"
s2 = 'python'
print(s1)
print(s2)

# 用加号拼接字符串
s3 = s1 + s2          # 直接拼接
print(s3)
s4 = s1 + " " + s2    # 拼接时加入空格
print(s4)

# 用格式化符号拼接:%s 代表字符串,%d 代表整数
name = "Mike"
age = 20
print("Name: %s, Age: %d" % (name, age))

a1 = 10
a2 = 20
# 在格式化字符串中进行计算
print("%d + %d = %d" % (a1, a2, a1 + a2))
hello
python
hellopython
hello python
Name: Mike, Age: 20
10 + 20 = 30

访问字符与切片操作

字符串中的每个字符都有一个位置索引(下标),索引从 0 开始。你可以像访问列表元素一样,通过方括号 [] 和索引来获取字符串中特定位置的字符;下标也可以为负数,-1 表示最后一个字符。

切片操作可以从字符串中提取一个子串。语法为 字符串[起始索引:结束索引:步长]。这是一个左闭右开区间,即包含起始索引的字符,但不包含结束索引的字符;省略起始索引时默认从开头开始,省略结束索引时默认取到末尾。

s = "hello"
print(s[0])   # 第1个字符,索引为0
print(s[-1])  # 倒数第1个字符
print(s[-2])  # 倒数第2个字符

line = "zhangsan,20"
name = line[0:8]   # 索引0到7,不含8,即名字
print(name)
print(line[:8])    # 省略起始索引,默认从0开始
print(line[0::2])  # 从0开始到末尾,步长为2,每隔一个字符取一个
h
o
l
zhangsan
zhangsan
zaga,0

常用的字符串方法

字符串类型内置了许多方法(函数),可以方便地完成各种操作。调用方法的格式是:字符串变量.方法名(参数)。

1. 判断与转换:.islower() 判断字符串是否全部由小写字母组成,.upper() 将字符串中所有字母转换为大写。

2. 切分字符串:.split(分隔符) 根据指定的分隔符将字符串切分成多个部分,并返回一个列表。

3. 格式化字符串:.format() 在字符串模板中用花括号 {} 作为占位符。花括号内可以写参数的编号,用来指定填充顺序;冒号后面可以写格式控制,例如浮点数精度或字符串显示宽度。

print("hello".islower())  # 全小写
print("Hello".islower())  # 首字母大写
print("Hello".upper())    # 转换为大写

data = "apple,banana,orange"
fruits = data.split(",")  # 以逗号为分隔符进行切分
print(fruits)
print(type(fruits))       # 查看返回值的类型

# 按顺序填充
print("{}:{}".format("name", "Mike"))
# 按编号填充,输出顺序可以自定义
print("{0} + {1} = {2}".format(2, 3, 2 + 3))
print("{2} = {1} + {0}".format(2, 3, 2 + 3))
# 控制浮点数精度,保留3位有效数字
print('{0:.3}'.format(1 / 3))
# 控制字符串显示宽度,每个占位符宽度为7个字符
print('{0:7}{1:7}'.format('use', 'python'))
True
False
HELLO
['apple', 'banana', 'orange']
<class 'list'>
name:Mike
2 + 3 = 5
5 = 3 + 2
0.333
use    python 

如何探索更多字符串方法?

Python 提供了丰富的字符串方法,我们无法一一记住。掌握以下探索工具至关重要:

  1. IDE 自动补全:在集成开发环境中输入一个字符串变量后加 .,通常会弹出方法列表供你选择。
  2. 使用 dir() 函数:dir(字符串变量) 可以列出该字符串对象所有可用的属性和方法名。
  3. 查阅官方文档:Python 官方文档是终极参考。你可以搜索“Python string methods”找到标准库中关于字符串方法的详细说明和示例。
s = "example"
# 这会输出一个很长的方法列表,其中包含 split, upper, format 等
# 为便于阅读,下面每行打印 8 个方法名
names = dir(s)
for i in range(0, len(names), 8):
    print(names[i:i + 8])
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__']
['__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__']
['__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__']
['__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__']
['__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith']
['expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii']
['isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle']
['isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix']
['removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip']
['split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper']
['zfill']

📝 动手练一练

尝试使用一句 Python 代码将列表 ['Jan', 'Feb', 'March'] 中的单词都转换为大写,并且用 ' is followed by ' 将它们串接起来。

👉 点击查看参考答案

思路:首先需要将列表中的每个字符串转换为大写,这可以用列表推导式配合 .upper() 方法完成。然后,使用字符串的 .join() 方法,用指定的连接符将列表中的所有字符串连接成一个新字符串。

input_list = ['Jan', 'Feb', 'March']
# 1. 用列表推导式将每个元素转为大写,得到新列表
# 2. 用 ' is followed by ' 连接新列表中的所有字符串
result = ' is followed by '.join([word.upper() for word in input_list])
print(result)
JAN is followed by FEB is followed by MARCH

常见错误

错误写法现象或报错原因正确写法
print(s[10])(s = "hello")IndexError: string index out of range索引超出了字符串的长度范围(0 到 4)。使用有效索引,如 s[0] 或 s[-1]。
s = 'It's a book'SyntaxError: unterminated string literal (detected at line 1)字符串内部本身有单引号,再用单引号定义会导致解释器提前结束字符串。外部改用双引号:s = "It's a book",或对内部单引号转义:s = 'It\'s a book'。
"年龄:" + 25TypeError: can only concatenate str (not "int") to str加号 + 只能拼接字符串,不能直接拼接字符串和整数。先把整数转成字符串:"年龄:" + str(25),或使用格式化:"年龄:%d" % 25。

小结

  1. 字符串用单引号 ' 或双引号 " 定义,内部包含引号时需交替使用或进行转义。
  2. 使用加号 + 可拼接字符串;使用 % 或 .format() 可进行格式化拼接,后者更灵活。
  3. 通过下标 [索引] 可以访问字符串中的单个字符,索引从 0 开始,支持负数倒序索引。
  4. 切片操作 [起始:结束:步长] 用于获取子串,区间为左闭右开。
  5. 字符串对象有许多内置方法,如 .upper()、.split()、.format() 等,通过 变量名.方法名() 调用。
  6. 善用 IDE 补全、dir() 函数和官方文档来探索未知的方法。

📋 行动清单

  • 在 Python 交互环境中,定义一个包含你名字的字符串,分别用加号和 .format() 方法将其与“你好,”拼接并打印。
  • 对字符串 "PythonProgramming" 进行切片操作,分别取出 "Python" 和 "Programming"。
  • 查阅文档或使用 dir(),找到一个能将字符串 " Hello World " 首尾空格去掉的方法并尝试使用。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第3章代码包:字符串(含1 个 Notebook)
    ZIP · 1KB
    下载