Python案例如何实现数据求和统计?

wen python案例 18

本文目录导读:

Python案例如何实现数据求和统计?

  1. 基础列表求和
  2. 多维数据求和
  3. 字典数据求和
  4. 条件求和
  5. 文件数据求和
  6. 自定义求和函数
  7. 性能优化示例

我来介绍几种Python实现数据求和的常用方法和案例。

基础列表求和

使用内置sum函数

# 最简单的列表求和
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(f"列表求和结果:{total}")  # 输出:15
# 带起始值的求和
total_with_start = sum(numbers, 10)  # 从10开始累加
print(f"带起始值求和:{total_with_start}")  # 输出:25

使用循环

# 使用for循环求和
numbers = [1, 2, 3, 4, 5]
total = 0
for num in numbers:
    total += num
print(f"循环求和结果:{total}")  # 输出:15
# 使用while循环求和
total = 0
i = 0
while i < len(numbers):
    total += numbers[i]
    i += 1
print(f"while循环求和:{total}")  # 输出:15

多维数据求和

二维列表求和

# 矩阵求和
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
# 方法1:使用嵌套循环
total = 0
for row in matrix:
    for num in row:
        total += num
print(f"矩阵所有元素求和:{total}")  # 输出:45
# 方法2:使用列表推导式
total = sum(sum(row) for row in matrix)
print(f"列表推导式求和:{total}")  # 输出:45

按行/列求和

# 按行求和
row_sums = [sum(row) for row in matrix]
print(f"每行求和:{row_sums}")  # 输出:[6, 15, 24]
# 按列求和
col_sums = [sum(matrix[row][col] for row in range(len(matrix))) 
            for col in range(len(matrix[0]))]
print(f"每列求和:{col_sums}")  # 输出:[12, 15, 18]

字典数据求和

# 字典值求和
sales = {
    '苹果': 100,
    '香蕉': 80,
    '橘子': 120
}
total_sales = sum(sales.values())
print(f"总销售额:{total_sales}")  # 输出:300
# 字典列表求和
products = [
    {'name': '手机', 'price': 5000, 'quantity': 3},
    {'name': '电脑', 'price': 8000, 'quantity': 2},
    {'name': '平板', 'price': 3000, 'quantity': 5}
]
# 计算总金额
total_amount = sum(item['price'] * item['quantity'] for item in products)
print(f"总金额:{total_amount}")  # 输出:46000

条件求和

numbers = [1, -2, 3, -4, 5, -6, 7]
# 正数求和
positive_sum = sum(num for num in numbers if num > 0)
print(f"正数求和:{positive_sum}")  # 输出:16
# 偶数求和
even_sum = sum(num for num in numbers if num % 2 == 0)
print(f"偶数求和:{even_sum}")  # 输出:-12
# 绝对值求和
abs_sum = sum(abs(num) for num in numbers)
print(f"绝对值求和:{abs_sum}")  # 输出:28

文件数据求和

# 从文本文件读取数字并求和
def sum_from_file(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            numbers = []
            for line in file:
                # 每行可能有多个数字,用空格或逗号分隔
                for token in line.replace(',', ' ').split():
                    try:
                        numbers.append(float(token))
                    except ValueError:
                        pass  # 忽略非数字字符
            return sum(numbers)
    except FileNotFoundError:
        print(f"文件 {filename} 未找到")
        return 0
# 示例使用
# 创建测试文件
with open('data.txt', 'w') as f:
    f.write("10, 20, 30\n40 50\n60,70")
result = sum_from_file('data.txt')
print(f"文件数据求和结果:{result}")  # 输出:280.0

自定义求和函数

def flexible_sum(data, condition=None, transform=None):
    """
    灵活的数据求和函数
    参数:
        data: 输入数据(列表、元组等可迭代对象)
        condition: 条件函数(可选),返回布尔值
        transform: 转换函数(可选),对每个元素进行处理
    """
    total = 0
    for item in data:
        # 应用条件过滤
        if condition and not condition(item):
            continue
        # 应用转换
        value = transform(item) if transform else item
        total += value
    return total
# 使用示例
numbers = [1, 2, 3, 4, 5, 6]
# 所有数字求和
print(flexible_sum(numbers))  # 输出:21
# 大于3的数字求和
print(flexible_sum(numbers, condition=lambda x: x > 3))  # 输出:15
# 计算平方和
print(flexible_sum(numbers, transform=lambda x: x ** 2))  # 输出:91
# 奇数的立方和
result = flexible_sum(numbers, 
                     condition=lambda x: x % 2 == 1,
                     transform=lambda x: x ** 3)
print(f"奇数的立方和:{result}")  # 输出:1 + 27 + 125 = 153

性能优化示例

import time
# 大数据量求和性能对比
def compare_performance():
    # 创建100万个数字
    large_list = list(range(1, 1000001))
    # 方法1:使用sum函数
    start = time.time()
    result1 = sum(large_list)
    time1 = time.time() - start
    print(f"sum函数耗时:{time1:.4f}秒")
    # 方法2:使用for循环
    start = time.time()
    result2 = 0
    for num in large_list:
        result2 += num
    time2 = time.time() - start
    print(f"for循环耗时:{time2:.4f}秒")
    # 方法3:使用reduce
    from functools import reduce
    start = time.time()
    result3 = reduce(lambda x, y: x + y, large_list)
    time3 = time.time() - start
    print(f"reduce耗时:{time3:.4f}秒")
    print(f"结果验证:{result1 == result2 == result3}")
# 运行性能对比
compare_performance()
  1. 优先使用内置函数sum() 是最快的方法
  2. 列表推导式:适合条件求和
  3. 生成器表达式:节省内存,适合大数据
  4. 避免浮点数精度问题:使用 Decimal 或四舍五入
  5. 异常处理:处理非数字数据时添加异常处理

这些方法涵盖了Python中常见的数据求和场景,可以根据具体需求选择合适的方法。

抱歉,评论功能暂时关闭!