本文目录导读:

我来介绍几种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()
- 优先使用内置函数:
sum()是最快的方法 - 列表推导式:适合条件求和
- 生成器表达式:节省内存,适合大数据
- 避免浮点数精度问题:使用
Decimal或四舍五入 - 异常处理:处理非数字数据时添加异常处理
这些方法涵盖了Python中常见的数据求和场景,可以根据具体需求选择合适的方法。