本文目录导读:

我来介绍几种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中常见的数据求和场景,可以根据具体需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播