Python中的列表(List)和 字符串(String)是两大核心数据类型:列表作为可变有序容器,支持混合类型元素与动态增删改查,适用于数据收集、缓存及嵌套结构处理;字符串作为不可变有序序列,专精于文本操作(切片、格式化、编码存储),常用于日志解析、数据清洗及常量管理。二者通过split()
与join()
无缝转换,结合使用可显著提升代码效率。
摘要
一、Python列表(List)
1. 定义与核心特性
2. 基础操作
遍历与计算
切片与倒序
3. 高级操作
增删改查
排序与反转
4. 深浅拷贝的陷阱与解决方案
5. 列表与字符串的互转
二、Python字符串(String)
1. 定义与核心特性
2. 引号与转义
3. 字符串格式化(三种方式)
4. 常用操作
索引与切片
检索与判断
大小写与去空格
拆分与连接
5. 不可变性的实际影响
三、列表与字符串的对比与选择
实际应用建议
四、总结
可变有序序列:列表由一系列元素组成,允许直接修改元素(增删改),且修改后列表的内存地址保持不变。
支持混合类型:元素可以是整数、字符串、列表、布尔值等任意数据类型。
有序可迭代:元素按插入顺序存储,可通过索引或循环遍历访问。
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 计算最大值和求和
numbers = [3, 1, 4, 1, 5]
print(max(numbers)) # 输出 5
print(sum(numbers)) # 输出 14
# 切片操作:前闭后开区间
print(numbers[1:4]) # 输出 [1, 4, 1]
print(numbers[::-1]) # 倒序输出 [5, 1, 4, 1, 3]
# 添加元素
numbers.append(9) # 末尾添加 → [3, 1, 4, 1, 5, 9]
numbers.insert(2, 10) # 在索引2插入10 → [3, 1, 10, 4, 1, 5, 9]
numbers.extend([6, 7]) # 合并新列表 → [3, 1, 10, 4, 1, 5, 9, 6, 7]
# 删除元素
numbers.pop(3) # 删除索引3的元素 → [3, 1, 10, 1, 5, 9, 6, 7]
numbers.remove(1) # 删除第一个匹配的1 → [3, 10, 1, 5, 9, 6, 7]
numbers.clear() # 清空列表 → []
# 修改元素
numbers = [3, 1, 4]
numbers[0] = 100 # 修改后 → [100, 1, 4]
# 查找元素
print(numbers.index(1)) # 输出 1(返回元素1的索引)
print(numbers.count(1)) # 输出 1(统计元素1出现的次数)
# 排序与反转
numbers = [3, 1, 4, 1, 5]
numbers.sort() # 升序 → [1, 1, 3, 4, 5]
numbers.sort(reverse=True) # 降序 → [5, 4, 3, 1, 1]
numbers.reverse() # 反转 → [1, 1, 3, 4, 5]
a = [[1, 2], [3, 4]]
b = a.copy()
b[0][0] = 99
print(a) # 输出 [[99, 2], [3, 4]](内层列表被修改)
深拷贝:import copy; new_list = copy.deepcopy(old_list),完全独立复制所有层级。
import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
b[0][0] = 99
print(a) # 输出 [[1, 2], [3, 4]](原列表不受影响)
# 字符串转列表
s = "Python is fun"
lst = s.split(" ") # → ['Python', 'is', 'fun']
# 列表转字符串
lst = ["Hello", "World"]
s = " ".join(lst) # → "Hello World"
不可变有序序列:由字符组成,一旦创建无法直接修改,任何操作均生成新字符串。
编码存储:使用ASCII或Unicode编码存储字符,内存地址固定。
单引号与双引号:用于定义单行字符串,灵活应对嵌套场景。
s1 = 'He said, "Hello!"'
s2 = "It's a nice day."
三引号:支持多行文本,适合长文本或文档字符串。
s = """Line 1
Line 2
Line 3"""
转义字符:\n(换行)、\t(制表符)、\\(反斜杠)。
原始字符串:r"路径\new_folder" 避免转义,常用于正则表达式或文件路径。
name = "Bob"
age = 30
# 1. % 格式化
s1 = "Name: %s, Age: %d" % (name, age)
# 2. str.format()
s2 = "Name: {}, Age: {}".format(name, age)
# 3. f-string(推荐)
s3 = f"Name: {name}, Age: {age}"
s = "Hello World"
print(s[0]) # H(正向索引)
print(s[-1]) # d(反向索引)
print(s[2:5]) # llo(切片,前闭后开)
print(s[::-1]) # dlroW olleH(倒序)
# 查找内容
print(s.find("World")) # 6(返回首次出现的索引,未找到返回-1)
print(s.index("lo")) # 3(未找到会报错,需用try-except处理)
# 类型判断
print("123".isdigit()) # True(是否全为数字)
print("abc123".isalnum()) # True(是否仅含字母和数字)
s = " Hello, World! "
print(s.upper()) # " HELLO, WORLD! "
print(s.strip()) # "Hello, World!"(去除首尾空格)
s = "apple,banana,cherry"
lst = s.split(",") # → ['apple', 'banana', 'cherry']
s_new = "|".join(lst) # → "apple|banana|cherry"
字符串不可直接修改,需通过生成新对象实现
s = "hello"
s_new = s.replace("h", "H") # 生成新字符串 "Hello"
特性 |
列表(List) |
字符串(String) |
可变性 |
可变(支持增删改) |
不可变(操作生成新对象) |
存储内容 |
任意数据类型 |
仅字符 |
内存效率 |
较低(需存储元素及结构信息) |
较高(紧凑存储编码值) |
适用场景 |
动态数据集合、频繁修改 |
文本处理、常量存储 |
1.选择列表的场景
需要动态添加或删除元素(如用户输入收集)。
存储混合数据类型(如数据库查询结果)
多层嵌套结构(如JSON数据处理)
2.选择字符串的场景
处理文本数据(如日志解析、文件读取)
需要高效查找或模式匹配(如正则表达式)
常量定义(如配置参数、错误消息)
列表是Python中最灵活的数据结构,适合处理动态、复杂的数据集合。
字符串以其不可变性和高效性,成为文本处理的基石。
二者可通过split()和join()无缝转换,结合使用能显著提升代码效率。
掌握列表与字符串的核心操作,是成为Python开发高手的必经之路!