Practical Python项目笔记:Python容器类型实战指南

Practical Python项目笔记:Python容器类型实战指南

practical-python Practical Python Programming (course by @dabeaz) practical-python 项目地址: https://gitcode.com/gh_mirrors/pr/practical-python

在Python编程中,容器(Containers)是存储和组织数据的基础工具。本文将深入探讨Python中的三种核心容器类型:列表(List)、字典(Dict)和集合(Set),并通过实际金融数据分析案例展示它们的应用。

容器类型概述

Python提供了多种容器类型来满足不同场景下的数据存储需求:

  1. 列表(List):有序元素集合,适合保持数据顺序的场景
  2. 字典(Dict):键值对集合,提供快速查找能力
  3. 集合(Set):无序唯一元素集合,适合去重和成员测试

列表(List)实战应用

列表是最常用的序列类型,特别适合处理有序数据集。在金融分析中,我们常用列表来存储股票组合数据。

创建股票组合列表

portfolio = [
    ('GOOG', 100, 490.1),  # (股票代码, 数量, 价格)
    ('IBM', 50, 91.3),
    ('CAT', 150, 83.44)
]

动态构建列表

实际项目中,我们通常从文件或数据库动态构建列表:

records = []  # 初始化空列表

with open('portfolio.csv', 'rt') as f:
    next(f)  # 跳过标题行
    for line in f:
        row = line.split(',')
        records.append((row[0], int(row[1]), float(row[2])))

专业建议:对于CSV文件处理,使用csv模块比手动分割更健壮,能自动处理字段引号和转义字符。

字典(Dict)高效查询

字典提供了O(1)时间复杂度的查找能力,非常适合作为内存数据库使用。

股票价格字典示例

prices = {
   'GOOG': 513.25,
   'CAT': 87.22,
   'IBM': 93.37,
   'MSFT': 44.12
}

安全字典访问技巧

直接通过prices['IBM']访问可能引发KeyError,推荐使用:

# 方法1:成员测试
if 'IBM' in prices:
    print(prices['IBM'])

# 方法2:get()方法提供默认值
price = prices.get('SCOX', 0.0)  # 不存在返回0.0

复合键应用

字典键可以是任何不可变类型,如元组:

holidays = {
  (1, 1): '元旦',
  (3, 14): '圆周率日',
}

print(holidays[3, 14])  # 输出"圆周率日"

注意:列表、字典等可变类型不能作为字典键。

集合(Set)高级操作

集合提供了高效的成员测试和集合运算能力。

基本集合操作

tech_stocks = {'IBM', 'AAPL', 'MSFT'}

# 成员测试
print('IBM' in tech_stocks)  # True

# 去重示例
names = ['IBM', 'AAPL', 'IBM', 'GOOG']
unique_names = set(names)  # {'IBM', 'AAPL', 'GOOG'}

集合运算

s1 = {'a', 'b', 'c'}
s2 = {'c', 'd'}

print(s1 | s2)  # 并集 {'a', 'b', 'c', 'd'}
print(s1 & s2)  # 交集 {'c'}
print(s1 - s2)  # 差集 {'a', 'b'}

实战项目:股票组合分析

让我们将这些容器类型应用于实际的股票组合分析。

练习2.4:元组列表实现

def read_portfolio(filename):
    """读取CSV文件到元组列表"""
    portfolio = []
    with open(filename, 'rt') as f:
        rows = csv.reader(f)
        headers = next(rows)
        for row in rows:
            holding = (row[0], int(row[1]), float(row[2]))
            portfolio.append(holding)
    return portfolio

练习2.5:字典列表改进

使用字典提高代码可读性:

def read_portfolio(filename):
    """读取CSV文件到字典列表"""
    portfolio = []
    with open(filename, 'rt') as f:
        rows = csv.reader(f)
        headers = next(rows)
        for row in rows:
            holding = {
                'name': row[0],
                'shares': int(row[1]),
                'price': float(row[2])
            }
            portfolio.append(holding)
    return portfolio

练习2.6:价格字典构建

def read_prices(filename):
    """读取价格CSV到字典"""
    prices = {}
    with open(filename, 'r') as f:
        rows = csv.reader(f)
        for row in rows:
            try:
                prices[row[0]] = float(row[1])
            except IndexError:  # 处理空行
                continue
    return prices

性能与可读性权衡

  1. 列表:保持顺序,索引访问快,但查找慢(O(n))
  2. 字典:查找极快(O(1)),但不保持顺序(Python 3.7+保持插入顺序)
  3. 集合:成员测试极快(O(1)),自动去重

专家建议:在数据处理管道中,通常先用列表收集数据,然后根据需要转换为字典或集合进行高效查询。

总结

掌握Python容器类型是数据处理的基础。通过本教程,您已经学会了:

  1. 使用列表处理有序数据集
  2. 利用字典实现快速查找
  3. 应用集合进行高效成员测试和去重
  4. 将这些技术应用于实际的金融数据分析场景

在实际项目中,根据数据特性和操作需求选择合适的容器类型,可以显著提高代码的效率和可读性。

practical-python Practical Python Programming (course by @dabeaz) practical-python 项目地址: https://gitcode.com/gh_mirrors/pr/practical-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邵瑗跃Free

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

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

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

打赏作者

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

抵扣说明:

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

余额充值