一、数据结构

1. 字符串 (String)

基本特性

  • 不可变序列类型
  • 可以使用单引号(')或双引号(")定义
  • 支持Unicode字符

常用操作

s = "Hello Python"

# 索引和切片
print(s[0])     # 'H' (索引从0开始)
print(s[6:12])  # 'Python' (切片)

# 常用方法
print(s.upper())       # 转大写
print(s.lower())       # 转小写
print(s.split())       # 分割字符串 ['Hello', 'Python']
print(" ".join(["Hello", "World"]))  # 合并字符串

# 格式化
name = "Alice"
print(f"Hello, {name}!")  # f-string (Python 3.6+)
print("Hello, {}!".format(name))  # format方法

转义字符

  • \n 换行
  • \t 制表符
  • \\ 反斜杠
  • \' 单引号
  • \" 双引号

2. 列表 (List)

基本特性

  • 可变序列类型
  • 可以包含不同类型的元素
  • 使用方括号[]定义

常用操作

lst = [1, 2, "a", 'b']

# 增删改查
lst.append(3)          # 末尾添加 [1, 2, 'a', 'b', 3]
lst.insert(1, "x")     # 指定位置插入 [1, 'x', 2, 'a', 'b', 3]
lst.remove("a")        # 删除元素 [1, 'x', 2, 'b', 3]
value = lst.pop(2)     # 移除并返回指定位置元素 [1, 'x', 'b', 3]

# 列表操作
lst_copy = lst.copy()  # 浅拷贝
lst.reverse()          # 反转列表
lst.sort()             # 排序(同类型元素)

# 列表推导式
squares = [x**2 for x in range(10)]

3. 元组 (Tuple)

基本特性

  • 不可变序列类型
  • 使用圆括号()定义
  • 可以包含不同类型的元素

常用操作

tup = (1, 2, '3', "4,5")

# 访问元素
print(tup[0])   # 1
print(tup[1:3]) # (2, '3')

# 特殊情况
single_tuple = (1,)  # 单元素元组必须有逗号
empty_tuple = ()     # 空元组

# 元组解包
a, b, c, d = tup

4. 集合 (Set)

基本特性

  • 无序不重复元素集
  • 可变类型(但有不可变的frozenset)
  • 使用花括号{}set()函数定义

常用操作

s = {1, 2, 3}

# 集合运算
s.add(4)            # 添加元素
s.remove(2)         # 移除元素(不存在会报错)
s.discard(5)        # 安全移除(不存在不报错)

# 集合操作
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b)  # 并集 {1, 2, 3, 4}
print(a & b)  # 交集 {2, 3}
print(a - b)  # 差集 {1}

5. 字典 (Dictionary)

基本特性

  • 键值对映射
  • 键必须是不可变类型
  • 使用花括号{}dict()函数定义

常用操作

dic = {1: "first", 2: "second", "three": 3}

# 增删改查
dic["four"] = 4      # 添加键值对
del dic[1]           # 删除键值对
value = dic.get(2)   # 安全获取值(避免KeyError)

# 字典方法
keys = dic.keys()    # 所有键
values = dic.values() # 所有值
items = dic.items()  # 所有键值对

# 字典推导式
square_dict = {x: x**2 for x in range(5)}

二、文件操作

1. 打开文件

基本语法

f = open("文件路径", "模式", encoding="编码")

常用模式

模式 描述
'r' 只读(默认)
'w' 写入(覆盖)
'a' 追加
'x' 创建新文件
'b' 二进制模式
't' 文本模式(默认)
'+' 读写模式

推荐方式(使用with语句)

with open("file.txt", "r", encoding="utf-8") as f:
    # 文件操作
# 自动关闭文件

2. 写入文件

常用方法

with open("output.txt", "w") as f:
    f.write("Hello World\n")  # 写入字符串
    f.writelines(["line1\n", "line2\n"])  # 写入多行

注意事项

  • 写入前确保文件以写入模式打开('w''a')
  • 换行符\n需要手动添加
  • 写入非字符串数据需要先转换

3. 读取文件

常用方法

with open("input.txt", "r") as f:
    content = f.read()       # 读取全部内容
    line = f.readline()      # 读取一行
    lines = f.readlines()    # 读取所有行(列表)

    # 逐行读取(推荐方式)
    for line in f:
        print(line.strip())  # strip()移除首尾空白

读取大文件

# 分块读取
with open("large_file.txt", "r") as f:
    while True:
        chunk = f.read(1024)  # 每次读取1024字节
        if not chunk:
            break
        process(chunk)

4. 关闭文件

重要原则

  • 文件使用完毕后必须关闭
  • 使用with语句可自动关闭
  • 手动关闭方式:
f = open("file.txt")
try:
    # 文件操作
finally:
    f.close()

三、数据结构对比

类型 可变性 有序性 元素要求 主要用途
字符串 不可变 有序 字符 文本处理
列表 可变 有序 任意 数据集合
元组 不可变 有序 任意 固定数据
集合 可变 无序 可哈希 去重/集合运算
字典 可变 无序(3.7+有序) 键可哈希 键值映射

四、文件操作最佳实践

  1. 总是使用with语句管理文件
  2. 明确指定文件编码(推荐utf-8)
  3. 大文件使用迭代方式读取
  4. 写入文件时注意换行符
  5. 二进制文件使用'rb''wb'模式

五、补充知识

1. 深拷贝与浅拷贝

import copy

original = [1, 2, [3, 4]]
shallow_copy = copy.copy(original)  # 浅拷贝

# 修改浅拷贝的外层元素(不影响原对象)
shallow_copy[0] = 100
print(original)      # [1, 2, [3, 4]]
print(shallow_copy)  # [100, 2, [3, 4]]

# 修改浅拷贝的嵌套对象(会影响原对象!)
shallow_copy[2][0] = 300
print(original)      # [1, 2, [300, 4]]  # 原对象也被修改!
print(shallow_copy)  # [100, 2, [300, 4]]

import copy

original = [1, 2, [3, 4]]
deep_copy = copy.deepcopy(original)  # 深拷贝

# 修改深拷贝的外层元素(不影响原对象)
deep_copy[0] = 100
print(original)    # [1, 2, [3, 4]]
print(deep_copy)   # [100, 2, [3, 4]]

# 修改深拷贝的嵌套对象(不影响原对象!)
deep_copy[2][0] = 300
print(original)    # [1, 2, [3, 4]]  # 原对象不受影响
print(deep_copy)   # [100, 2, [300, 4]]

2. 默认字典(collections.defaultdict)

from collections import defaultdict

dd = defaultdict(list)
dd["key"].append(1)  # 自动初始化空列表

3. JSON文件操作

import json

# 写入JSON
with open("data.json", "w") as f:
    json.dump({"name": "Alice"}, f)

# 读取JSON
with open("data.json", "r") as f:
    data = json.load(f)