Python 数据处理文档

13 阅读9分钟

🧠 Python 数据处理文档

核心思路:遍历 + dict + 排序


🟢 一、1 - 10)

1. 字符统计

Python

s = "aabbbcc"  # 定义待处理的字符串

count = {}  # 初始化一个空字典用于存储计数结果
for c in s:  # 遍历字符串中的每一个字符
    count[c] = count.get(c, 0) + 1  # 获取当前字符计数,不存在则默认为0,然后加1

print(count)  # 输出计数字典

2. 数组去重

Python

arr = [1,2,2,3]  # 定义包含重复元素的列表

res = list(set(arr))  # 将列表转为集合(set)自动去重,再转回列表
print(res)  # 输出去重后的列表

3. 去重 + 排序

Python

arr = [3,1,2,3]  # 定义乱序且有重复的列表

res = list(set(arr))  # 利用set去重
res.sort()  # 调用sort方法对列表进行原地升序排序

print(res)  # 输出去重并排序后的结果

4. 找最大值

Python

arr = [10,5,20]  # 定义数值列表

print(max(arr))  # 使用内置函数max获取列表中的最大值并打印

5. 找最小值

Python

arr = [10,5,20]  # 定义数值列表

print(min(arr))  # 使用内置函数min获取列表中的最小值并打印

6. 求和

Python

arr = [1,2,3]  # 定义数值列表

print(sum(arr))  # 使用内置函数sum计算列表中所有元素的总和

7. 字符串反转

Python

s = "abc"  # 定义字符串

print(s[::-1])  # 使用切片语法 [开始:结束:步长],步长为-1表示从后往前取

8. 判断回文

Python

s = "abba"  # 定义字符串

print(s == s[::-1])  # 将原字符串与反转后的字符串比较,相等则为回文

9. 统计列表中元素出现次数

Python

arr = [1,1,2,3]  # 定义列表

count = {}  # 初始化字典
for x in arr:  # 遍历列表元素
    count[x] = count.get(x, 0) + 1  # 统计每个元素出现的频率

print(count)  # 打印统计结果

10. 遍历字典

Python

d = {"a":1,"b":2}  # 定义字典

for k, v in d.items():  # 使用items()同时获取键(key)和值(value)
    print(k, v)  # 打印键值对

🟡 二、(11 - 20)

11. 找出现最多的元素

Python

arr = [1,1,2,2,2,3]  # 定义列表

count = {}  # 初始化计数字典
for x in arr:  # 遍历并计数
    count[x] = count.get(x, 0) + 1

# 使用max函数,通过key参数指定比较规则为字典的值(count.get)
print(max(count, key=count.get))

12. 按值排序字典

Python

d = {"a":3,"b":1,"c":2}  # 定义字典

# 使用sorted排序,d.items()转化成元组列表,key指定按元组第二个元素(值)排序
res = sorted(d.items(), key=lambda x: x[1])

print(res)  # 输出排序后的元组列表

13. 列表元素平方

Python

arr = [1,2,3]  # 定义数值列表

res = [x*x for x in arr]  # 列表推导式:对arr中每个元素x执行x*x操作
print(res)  # 输出 [1, 4, 9]

14. 过滤大于2的数

Python

arr = [1,2,3,4]  # 定义数值列表

res = [x for x in arr if x > 2]  # 列表推导式配合if条件过滤
print(res)  # 输出 [3, 4]

15. 两个数组配对

Python

a = [1,2,3]  # 第一个列表
b = ["a","b","c"]  # 第二个列表

for x, y in zip(a, b):  # 使用zip将两个列表对应索引的元素打包成元组
    print(x, y)  # 同时遍历打印

16. JSON排序

Python

import json  # 导入json模块

data = '[{"age":20},{"age":18}]'  # 定义json格式字符串

arr = json.loads(data)  # 将字符串解析为Python列表对象

arr.sort(key=lambda x: x["age"])  # 按字典中"age"键的值进行升序排序

print(arr)  # 输出排序后的列表

17. 按字段排序对象

Python

data = [
    {"name":"a","score":80},
    {"name":"b","score":90}
]  # 定义列表嵌套字典的数据

# 使用sort排序,reverse=True表示降序
data.sort(key=lambda x: x["score"], reverse=True)

print(data)  # 输出按成绩从高到低排序的结果

18. 找Top1

Python

arr = [10,30,20]  # 定义数值列表

print(max(arr))  # 获取并打印列表中的最大值

19. 统计字符串单词数量

Python

s = "hello world hello"  # 定义带空格的字符串

words = s.split()  # 默认按空格切割字符串,返回单词列表

count = {}  # 初始化计数字典
for w in words:  # 遍历单词列表
    count[w] = count.get(w, 0) + 1  # 统计单词频次

print(count)  # 输出结果

20. 判断是否存在某元素

Python

arr = [1,2,3]  # 定义列表

print(2 in arr)  # 使用 in 关键字判断元素是否在容器中,返回布尔值

🔵 三、进阶题(21 - 30)

21. 分组统计(核心)

Python

data = [
    {"type":"A","value":10},
    {"type":"A","value":20},
    {"type":"B","value":5}
]  # 定义原始数据列表

result = {}  # 用于存储分组累加结果

for d in data:  # 遍历每个字典对象
    t = d["type"]  # 获取类型
    
    if t not in result:  # 如果该类型第一次出现
        result[t] = 0  # 初始化值为0
    
    result[t] += d["value"]  # 累加当前字典的value值

print(result)  # 输出:{'A': 30, 'B': 5}

22. 分组 + 平均值

Python

data = [
    {"type":"A","value":10},
    {"type":"A","value":20}
]  # 定义原始数据

result = {}  # 用于存储求平均所需的中间数据

for d in data:  # 遍历数据
    t = d["type"]  # 获取分组类型
    
    if t not in result:  # 初始化该类型的总和及计数
        result[t] = {"sum":0,"count":0}
    
    result[t]["sum"] += d["value"]  # 累加数值
    result[t]["count"] += 1  # 累加出现次数

for t in result:  # 遍历计算后的中间字典
    avg = result[t]["sum"] / result[t]["count"]  # 计算平均值
    print(t, avg)  # 打印分组名和平均分

23. 最大利润(经典)

Python

prices = [7,1,5,3,6,4]  # 股票每日价格列表

min_price = prices[0]  # 初始化最低买入价格为第一天价格
max_profit = 0  # 初始化最高利润为0

for p in prices:  # 遍历每一天的价格
    min_price = min(min_price, p)  # 更新历史最低价格
    max_profit = max(max_profit, p - min_price)  # 更新最大利润(当前价格减去最低价)

print(max_profit)  # 输出最大可能利润

24. 找两个数之和

Python

arr = [2,7,11,15]  # 定义列表
target = 9  # 目标和

d = {}  # 辅助字典:存储 {数值: 索引}

for i, num in enumerate(arr):  # 同时获取索引i和数值num
    if target - num in d:  # 如果 目标值减当前值 的结果已在字典中
        print(d[target-num], i)  # 找到匹配对,打印它们的索引
    
    d[num] = i  # 将当前值和索引存入字典

25. 合并两个列表

Python

a = [1,2]  # 列表A
b = [3,4]  # 列表B

print(a + b)  # 使用 + 运算符拼接两个列表并输出

26. 队列(先进先出)

Python

from collections import deque  # 从标准库导入双端队列

q = deque()  # 创建队列对象

q.append(1)  # 向右端添加元素1
q.append(2)  # 向右端添加元素2

print(q.popleft())  # 从左端弹出并打印第一个进入的元素(先进先出)

27. 栈(后进先出)

Python

stack = []  # 使用普通列表模拟栈

stack.append(1)  # 入栈元素1
stack.append(2)  # 入栈元素2

print(stack.pop())  # 弹出并打印最后进入的元素(后进先出)

28. 使用Counter计数

Python

from collections import Counter  # 导入计数器类

arr = [1,1,2]  # 定义列表

count = Counter(arr)  # 快速统计列表中各元素出现的次数

print(count)  # 输出:Counter({1: 2, 2: 1})

29. 找TopK

Python

import heapq  # 导入堆队列算法库

arr = [3,1,5,2]  # 定义列表

print(heapq.nlargest(2, arr))  # 获取列表中最大的前2个元素

30. 用户消费Top1

Python

data = [
    {"user":"A","amount":100},
    {"user":"B","amount":200},
    {"user":"A","amount":50}
]  # 定义消费数据

total = {}  # 存储用户总金额

for d in data:  # 遍历每笔消费
    u = d["user"]  # 获取用户名
    total[u] = total.get(u, 0) + d["amount"]  # 累加消费金额

# 找到金额最大的键
max_user = max(total, key=total.get)

print(max_user, total[max_user])  # 打印最高消费者及其金额

股票利润计算(补充逻辑注释版)

Python

prices = [7,1,5,3,6,4]  # 每日股价

# 只能买卖一次
# 求最大利润(低买高卖)
# 输出:5

min_price = prices[0]  # 假定第一天价格最低
max_profit = 0;  # 初始利润为0

for p in prices:  # 遍历每日价格
    if p < min_price:  # 如果当前价格比历史最低还低
        min_price = p  # 更新最低买入价

    profit = p - min_price  # 计算如果今天卖出的利润
    if profit > max_profit:  # 如果该利润大于历史最高利润
        max_profit = profit  # 更新最高利润

print(max_profit)  # 输出最终结果

消费统计进阶版

Python

data = [
    {"user": "A", "amount": 100},
    {"user": "B", "amount": 200},
    {"user": "A", "amount": 50},
    {"user": "C", "amount": 400},
    {"user": "B", "amount": 100}
]  # 模拟更复杂的数据集

# 要求:
# 1. 统计每个用户总消费
# 2. 找出消费最高的用户

total = {}  # 用于统计的字典

for d in data:  # 遍历数据
    sum_amount = d["user"]  # 获取当前记录的用户名
    total[sum_amount] = total.get(sum_amount,0)+d["amount"]  # 累加金额

max_user = max(total,key=total.get)  # 获取消费金额最大的用户名

print(max_user,total[max_user])  # 打印该用户及其总额

股票平均价排序版

Python

trades = [
    {"symbol": "AAPL", "price": 10},
    {"symbol": "AAPL", "price": 12},
    {"symbol": "GOOG", "price": 8},
    {"symbol": "GOOG", "price": 10},
    {"symbol": "MSFT", "price": 15}
]  # 股票交易记录

# 要求:
# 1. 计算每个股票的平均价格
# 2. 按平均价格从高到低排序

price_groups = {}  # 存储分组价格列表 {简称: [价格1, 价格2...]}

for t in trades:  # 遍历交易记录
    s = t["symbol"]  # 提取股票简称
    p = t["price"]  # 提取价格
    if s not in price_groups:  # 如果简称第一次出现
        price_groups[s] = []  # 初始化列表
    price_groups[s].append(p)  # 将价格加入对应的列表

result = {}  # 存储最终平均值

for s,price in price_groups.items():  # 遍历分组后的字典
    result[s] = sum(price) / len(price)  # 计算平均数并存入结果字典

result_list = list(result.items())  # 将字典转为元组列表以便排序

# 对元组列表进行排序,x[1]表示按平均价排序,reverse=True为降序
# 注意:原代码此处 x[0] 是按名称排序,若按价格需改为 x[1]
result_list.sort(key=lambda x:x[1],reverse=True) 

print(result_list)  # 输出最终排序结果

🎯 总结

  • 遍历(for) :处理集合中每个元素的基础。
  • 计数(dict) :利用字典的键唯一性进行分类和频次统计。
  • 排序(sort / lambda) :对处理后的数据进行展示优化,lambda用于定义灵活的排序规则。
  • 分组(dict嵌套) :处理复杂结构(如求平均、分类型统计)的核心手段。