第二章:字符串
2.1 什么是字符串?
字符串就像 一串珍珠项链,由零个或多个字符按照顺序串在一起,形成一段有意义的文本。
字符串可以用三种引号来创建。
# 创建字符串。
name = '张三'; # 单引号。
school = "Hello, World!"; # 双引号。
# 三引号(可以包含多行内容)。
poem = """床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。""";
2.2 字符串的基本操作
2.2.1 访问字符串中的字符
字符串中的每个字符都有固定的位置(索引),从0开始:
text = "Python编程";
print(text[0]); # P - 第一个字符。
print(text[1]); # y - 第二个字符。
print(text[-1]); # 程 - 最后一个字符。
print(text[-2]); # 编 - 倒数第二个字符。
2.2.2 字符串切片
我们可以获取字符串的一部分,就像切蛋糕一样:
text = "Hello, Python!";
# 基本切片。
print(text[0:5]); # Hello - 从索引0到4。
print(text[7:13]); # Python - 从索引7到12。
# 省略开始或结束索引。
print(text[:5]); # Hello - 从开头到索引4。
print(text[7:]); # Python! - 从索引7到结尾。
# 使用步长。
print(text[::2]); # Hlo yhn - 每隔一个字符取一个。
2.2.3 字符串长度
使用 len() 函数获取字符串的长度:
name = "张三";
print(len(name)); # 2 :包含2个字符。
english_name = "John";
print(len(english_name)); # 4 :包含4个字符。
mixed = "Hello世界";
print(len(mixed)); # 7 :5个英文字符 + 2个中文字符。
2.2.4 字符串的拼接
把多个字符串连接在一起:
# 使用 + 号拼接。
first_name = "张";
last_name = "三";
full_name = first_name + last_name;
print(full_name); # 张三。
# 使用 * 号重复。
laugh = "哈" * 3;
print(laugh); # 哈哈哈。
# 使用 join() 方法。
words = ["我", "爱", "Python"];
sentence = "".join(words); # 用空字符连接。
print(sentence); # 我爱Python。
2.3 字符串的常用方法
2.3.1 大小写转换
text = "Hello, World!";
print(text.upper()); # HELLO, WORLD! - 全部大写。
print(text.lower()); # hello, world! - 全部小写。
print(text.title()); # Hello, World! - 每个单词首字母大写。
print(text.capitalize()); # Hello, world! - 首字母大写(非所有单词)。
2.3.2 查找和替换
text = "我喜欢Python编程,Python很有趣";
# 查找。
print(text.find("Python")); # 3 - 第一次出现的位置。
print(text.rfind("Python")); # 12 - 最后一次出现的位置。
print(text.count("Python")); # 2 - 出现的次数。
# 替换。
new_text = text.replace("Python", "Java");
print(new_text); # 我喜欢Java编程,Java很有趣。
2.3.3 去除空白字符
text = " Hello, World! ";
print(text.strip()); # "Hello, World!" - 去除两边空白。
print(text.lstrip()); # "Hello, World! " - 去除左边空白。
print(text.rstrip()); # " Hello, World!" - 去除右边空白。
2.3.4 判断字符串内容
text = "Hello123";
print(text.isalpha()); # False - 是否全是字母。
print(text.isdigit()); # False - 是否全是数字。
print(text.isalnum()); # True - 是否全是字母或数字。
print(text.startswith("H")); # True - 是否以H开头。
print(text.endswith("3")); # True - 是否以3结尾。
2.3.5 分割和连接
# 分割字符串。
sentence = "我,喜欢,Python,编程";
words = sentence.split(",");
print(words) # ['我', '喜欢', 'Python', '编程'];
# 连接字符串。
new_sentence = "-".join(words);
print(new_sentence); # 我-喜欢-Python-编程。
2.4 字符串格式化
2.4.1 使用 % 格式化
name = "张三";
age = 20;
score = 95.5;
# 传统格式化方式。
message = "我叫%s,今年%d岁,成绩是%.1f分" % (name, age, score);
print(message); # 我叫张三,今年20岁,成绩是95.5分。
2.4.2 使用 format() 方法
name = "李四";
age = 22;
# format方法。
message = "我叫{},今年{}岁".format(name, age);
print(message); # 我叫李四,今年22岁。
# 带位置参数。
message = "我叫{0},今年{1}岁,{0}喜欢编程".format(name, age);
print(message); # 我叫李四,今年22岁,李四喜欢编程。
2.4.3 使用 f-string(推荐)
name = "王五";
age = 25;
height = 175.5;
# f-string(Python 3.6+)。
message = f"我叫{name},今年{age}岁,身高{height}cm";
print(message); # 我叫王五,今年25岁,身高175.5cm。
# 在f-string中使用表达式。
a = 10;
b = 20;
result = f"{a} + {b} = {a + b}";
print(result) # 10 + 20 = 30;
2.5 转义字符
有些特殊字符需要用特殊的方式表示:
# 常用转义字符。
print("Hello\nWorld"); # \n 换行。
print("Hello\tWorld"); # \t 制表符。
print("他说:"你好""); # " 双引号。 转义双引号,使得双引号正常输出。
print('他说:'你好''); # ' 单引号。 转义单引号,使得单引号正常输出。
print("反斜杠:\"); # \ 反斜杠本身。
# 原始字符串(不处理转义字符)。
path = r"C:\Users\Documents\file.txt";
print(path); # C:\Users\Documents\file.txt。
运行结果:
Hello
World
Hello World
他说:"你好"
他说:'你好'
反斜杠:\
C:\Users\Documents\file.txt
2.6 字符串的不可变性
在Python中,字符串一旦创建就不能修改:
text = "Hello";
# text[0] = "h"; # 这会报错!
# 正确的方式是创建新的字符串。
new_text = "h" + text[1:];
print(new_text); # hello。
2.7 字符串编码
了解字符串的编码方式很重要:
text = "你好,世界";
# 编码为字节。
bytes_data = text.encode("utf-8");
print(bytes_data) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
# 解码为字符串。
new_text = bytes_data.decode("utf-8");
print(new_text); # 你好,世界。
本章笔记:
- 字符串是由字符组成的序列,用于表示文本信息。
- 可以用单引号、双引号或三引号创建字符串。
- 可以通过索引访问单个字符,通过切片获取子串。
- 字符串支持拼接、重复等基本操作。
- 字符串有很多实用的方法,如大小写转换、查找替换、分割连接等。
- 字符串格式化有三种方式:%格式化、format()方法和f-string。
- 转义字符用于表示特殊字符。
- 字符串是不可变的,任何修改都会创建新的字符串。
- 了解字符串编码有助于处理不同字符集的数据。