Python数据结构精讲教程-专家级(附示例代码)

Python数据结构精讲教程-专家级(附示例代码)

目录

  1. 线性数据结构
  2. 非线性数据结构
  3. 高级数据结构
  4. 性能分析与选择

线性数据结构

列表(List)

列表是Python中最常用的可变序列,可以存储任意类型的元素。

特点

  • 有序集合
  • 可变(可修改)
  • 可包含不同类型元素
  • 支持索引和切片

案例1:基本操作

# 创建列表
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'cherry']
mixed = [1, 'hello', 3.14, True]

# 访问元素
print(numbers[0])  # 输出: 1
print(fruits[-1])  # 输出: 'cherry'

# 修改元素
numbers[2] = 30
print(numbers)  # 输出: [1, 2, 30, 4, 5]

# 切片操作
print(numbers[1:4])  # 输出: [2, 30, 4]

案例2:列表方法

# 添加元素
fruits.append('orange')
print(fruits)  # ['apple', 'banana', 'cherry', 'orange']

# 插入元素
fruits.insert(1, 'grape')
print(fruits)  # ['apple', 'grape', 'banana', 'cherry', 'orange']

# 移除元素
fruits.remove('banana')
print(fruits)  # ['apple', 'grape', 'cherry', 'orange']

# 排序
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 9]

# 列表推导式
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

案例3:多维列表

# 创建二维列表(矩阵)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 访问元素
print(matrix[1][2])  # 输出: 6

# 遍历二维列表
for row in matrix:
    for item in row:
        print(item, end=' ')
    print()
# 输出:
# 1 2 3 
# 4 5 6 
# 7 8 9 

# 列表生成式创建二维列表
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)  # [[1, 2, 3], [2, 4, 6], [3, 6, 9]]

元组(Tuple)

元组是不可变的序列,通常用于存储不可修改的数据集合。

特点

  • 有序集合
  • 不可变(创建后不能修改)
  • 可包含不同类型元素
  • 比列表更高效

案例1:基本操作

# 创建元组
coordinates = (10.0, 20.0)
colors = ('red', 'green', 'blue')
single_element = (42,)  # 注意逗号,区别于(42)

# 访问元素
print(coordinates[0])  # 10.0
print(colors[-1])     # 'blue'

# 元组解包
x, y = coordinates
print(f"x: {
     
     x}, y: {
     
     y}")  # x: 10.0, y: 20.0

# 不可变性尝试(会报错)
# coordinates[0] = 15.0  # TypeError

案例2:元组与列表转换

# 列表转元组
numbers_list = [1, 2, 3]
numbers_tuple = tuple(numbers_list)
print(numbers_tuple)  # (1, 2, 3)

# 元组转列表
colors_list = list(colors)
print(colors_list)  # ['red', 'green', 'blue']

# 元组作为字典键
locations = {
   
   
    (35.6895, 139.6917): "Tokyo",
    (40.7128, -74.0060): "New York"
}
print(locations[(35.6895, 139.6917)])  # Tokyo

案例3:命名元组

from collections import namedtuple

# 定义命名元组类型
Point = namedtuple('Point', ['x', 'y'])

# 创建命名元组实例
p = Point(11, y=22)

# 访问元素
print(p.x, p.y)  # 11 22
print(p[0], p[1])  # 11 22

# 不可变性
# p.x = 33  # AttributeError

# 转换为字典
print(p._asdict())  # {'x': 11, 'y': 22}

字符串(String)

字符串是不可变的字符序列,用于表示文本数据。

特点

  • 不可变序列
  • 支持索引和切片
  • 丰富的内置方法
  • 支持多种编码

案例1:基本操作

# 创建字符串
s1 = 'Hello'
s2 = "World"
s3 = """多行
字符串"""

# 访问字符
print(s1[0])  # 'H'
print(s2[-1])  # 'd'

# 字符串拼接
greeting = s1 + ' ' + s2
print(greeting)  # 'Hello World'

# 字符串重复
laugh = 'ha' * 3
print(laugh)  # 'hahaha'

# 字符串长度
print(len(s1))  # 5

案例2:字符串方法

# 大小写转换
text = "Python Programming"
print(text.lower())  # 'python programming'
print(text.upper())  # 'PYTHON PROGRAMMING'
print(text.title())  # 'Python Programming'

# 查找和替换
print(text.find('Pro'))  # 7
print(text.replace('Python', 'Java'))  # 'Java Programming'

# 分割和连接
csv = "apple,banana,cherry"
fruits = csv.split(',')
print(fruits)  # ['apple', 'banana', 'cherry']
print('-'.join(fruits))  # 'apple-banana-cherry'

# 格式化
name, age = "Alice", 25
print(f"{
     
     name} is {
     
     age} years old.")  # 'Alice is 25 years old.'
print("{0} is {1} years old.".format(name, age))  # 同上

案例3:字符串编码与正则表达式

# 编码与解码
text = "中文"
encoded = text.encode('utf-8')
print(encoded)  # b'\xe4\xb8\xad\xe6\x96\x87'
decoded = encoded.decode('utf-8')
print(decoded)  # '中文'

# 正则表达式
import re

# 查找所有数字
text = "There are 123 apples and 456 oranges."
numbers = re.findall(r'\d+', text)
print(numbers)  # ['123', '456']

# 验证电子邮件格式
def is_valid_email(email):
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return bool(re.match(pattern, email))

print(is_valid_email("test@example.com"))  # True
print(is_valid_email("invalid.email"))     # False

非线性数据结构

字典(Dictionary)

字典是键值对的集合,基于哈希表实现,具有极快的查找速度。

特点

  • 无序集合(Python 3.7+保持插入顺序)
  • 键必须是不可变类型
  • 值可以是任意类型
  • 可变(可添加、修改、删除键值对)

案例1:基本操作

# 创建字典
person = {
   
   'name': 'Alice', 'age': 25, 'city': 'New York'}
empty_dict = {
   
   }
dict_from_list = dict([('a', 1), ('b', 2)])

# 访问元素
print(person['name'])  # 'Alice'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十一剑的CS_DN博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值