Python字符串基础

通过本教程,你将掌握Python字符串的基本概念、常用操作和最佳实践,为你的Python编程之旅打下坚实基础。

字符串简介

字符串是Python中最常用的数据类型之一,用于表示文本数据。在Python中,字符串是不可变的序列类型,这意味着一旦创建就不能修改其内容。

字符串的特点

  • 使用单引号或双引号创建
  • 支持Unicode字符集,可以处理多语言文本
  • 不可变对象,所有修改操作都会返回新的字符串
  • 支持索引和切片操作
  • 提供丰富的内置方法

学习建议

在学习字符串操作时,建议:

  • 先掌握基本的创建和访问方法
  • 理解字符串的不可变性质
  • 多练习常用的字符串方法
  • 掌握字符串格式化的不同方式

创建字符串

Python提供了多种创建字符串的方式,让我们来看看最常用的几种:


# 使用单引号
name = 'Python编程'

# 使用双引号
message = "Hello, World!"

# 使用三引号(支持多行)
text = """这是一个
多行字符串
示例"""

# 使用转义字符
path = 'C:\\Users\\Documents'  # 使用 \\ 表示反斜杠
special = 'He said: \'Hello!\''  # 使用 \' 表示引号

# 原始字符串(raw string)
raw_path = r'C:\Users\Documents'  # 不处理转义字符
                    

注意事项

  • 单引号和双引号在Python中完全等价
  • 使用三引号创建的字符串会保留换行符
  • 在字符串中使用引号时,要注意使用转义字符或选择不同的引号类型
  • 原始字符串(r-string)在处理文件路径时特别有用

基本操作

索引和切片


text = "Python编程"
# 索引(从0开始)
first = text[0]      # 'P'
last = text[-1]      # '程'

# 切片
sub = text[0:6]      # 'Python'
reverse = text[::-1] # '程编nohtyP'

# 字符串长度
length = len(text)   # 8
                    

字符串拼接


# 使用 + 运算符
str1 = "Hello"
str2 = "World"
greeting = str1 + " " + str2  # "Hello World"

# 使用 join() 方法(推荐用于多个字符串)
words = ["Python", "是", "最好的", "语言"]
sentence = "".join(words)  # "Python是最好的语言"

# 使用 * 运算符重复字符串
stars = "*" * 5  # "*****"
                    

性能提示

当需要拼接大量字符串时:

  • 使用 join() 方法比 + 运算符更高效
  • 避免在循环中使用 += 运算符
  • 考虑使用列表存储字符串片段,最后再join

常用方法


# 大小写转换
text = "Hello Python"
print(text.upper())      # 'HELLO PYTHON'
print(text.lower())      # 'hello python'
print(text.title())      # 'Hello Python'
print(text.capitalize()) # 'Hello python'

# 查找和替换
text = "Python编程学习"
print(text.find("编程"))   # 6
print(text.count("编"))    # 1
print(text.replace("Python", "Java"))  # 'Java编程学习'

# 判断方法
text = "Python3.9"
print(text.isalpha())    # False(包含数字)
print(text.isalnum())    # True(字母和数字)
print(text.isdigit())    # False(不全是数字)
print(text.startswith("Py"))  # True
print(text.endswith("9"))     # True

# 分割和合并
text = "Python,Java,C++"
langs = text.split(",")   # ['Python', 'Java', 'C++']
new_text = "-".join(langs)  # 'Python-Java-C++'

# 去除空白
text = "  Python  "
print(text.strip())      # 'Python'
print(text.lstrip())     # 'Python  '
print(text.rstrip())     # '  Python'
                    

字符串格式化

Python提供了多种字符串格式化的方式,其中f-string是最新和最推荐的方式。


# f-string(Python 3.6+,推荐使用)
name = "Python"
age = 30
print(f"{name}已经{age}岁了")
print(f"{name:>10}")  # 右对齐,宽度10
print(f"{3.14159:.2f}")  # 保留2位小数

# str.format()方法
print("{}已经{}岁了".format(name, age))
print("{lang}已经{years}岁了".format(lang=name, years=age))

# %操作符(传统方式)
print("%s已经%d岁了" % (name, age))

# 格式化数字
pi = 3.14159
price = 1234.5678
print(f"π值:{pi:.2f}")           # 3.14
print(f"价格:¥{price:,.2f}")     # ¥1,234.57
print(f"百分比:{0.15:.1%}")      # 15.0%
                    

格式化说明符

  • d: 整数
  • f: 浮点数
  • s: 字符串
  • xX: 十六进制
  • eE: 科学计数法
  • %: 百分比
  • ,: 千位分隔符

编码与解码

在处理不同编码的文本时,了解字符串的编码和解码是很重要的。


# 字符串编码
text = "Python编程"
encoded = text.encode('utf-8')    # 编码为UTF-8
encoded_gbk = text.encode('gbk')  # 编码为GBK

# 字符串解码
decoded = encoded.decode('utf-8')      # 使用UTF-8解码
decoded_gbk = encoded_gbk.decode('gbk') # 使用GBK解码

# 处理文件编码
with open('text.txt', 'r', encoding='utf-8') as f:
    content = f.read()  # 以UTF-8编码读取文件

# 处理特殊字符
text = "Hello\u0020World"  # Unicode转义序列
print(text)  # "Hello World"
                    

编码注意事项

  • 在处理中文时,推荐使用UTF-8编码
  • 确保编码和解码使用相同的字符集
  • 处理文件时要明确指定编码方式
  • 注意处理编码错误的异常

练习题

基础练习

  1. 编写一个函数,接受一个字符串,返回该字符串的反转结果。

    查看提示
    
    def reverse_string(text):
        return text[::-1]
    
    # 测试
    print(reverse_string("Hello"))  # "olleH"
                                        
  2. 编写一个函数,统计字符串中每个字符出现的次数。

    查看提示
    
    from collections import Counter
    
    def count_chars(text):
        return Counter(text)
    
    # 测试
    print(count_chars("hello"))  # Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
                                        

进阶练习

  1. 实现一个函数,判断一个字符串是否是回文字符串(忽略大小写和空格)。

    查看提示
    
    def is_palindrome(text):
        # 移除空格并转换为小写
        s = ''.join(text.lower().split())
        return s == s[::-1]
    
    # 测试
    print(is_palindrome("A man a plan a canal Panama"))  # True
                                        
  2. 编写一个函数,实现简单的字符串模板替换。

    查看提示
    
    def template_replace(template, **kwargs):
        return template.format(**kwargs)
    
    # 测试
    template = "你好,{name}!今天是{date}。"
    print(template_replace(template, name="小明", date="2024-01-01"))
                                        

下一步学习