You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升百万级列表中字符串比对的执行速度?

百万级数据城市比对分类写入的性能优化方案

这个场景我太熟悉了!原代码的嵌套循环在百万级数据下简直是性能灾难,给你几个落地性极强的优化方案,一步步把速度拉起来:

1. 先分组再写入:把O(N*M)降到O(N+M)

原代码最大的问题是重复遍历销售数据——每处理一个城市,就要把所有salesData扫一遍。我们可以先遍历一次salesData,按城市把数据分组,之后直接按分组写入文件,这样时间复杂度直接从O(N*M)降到O(N+M),百万级数据下差异会特别明显。

用Python的collections.defaultdict实现会很方便:

from collections import defaultdict

# 先一次性完成分组
city_groups = defaultdict(list)
for data in salesData:
    city = data[2]
    # 提前把要写入的字符串处理好,避免后续重复操作
    line = " ".join(data) + "\n"
    city_groups[city].append(line)

# 再按分组写入文件
for city, lines in city_groups.items():
    with open(f"{city}.txt", "a+") as file:
        # 一次性写入所有行,减少IO次数
        file.writelines(lines)

这里还顺便优化了字符串处理:原代码的",".join(data).replace(","," ")完全可以直接用" ".join(data)代替,省了一次replace的开销。

2. 极致优化文件IO:减少磁盘交互次数

磁盘IO是程序性能的最大瓶颈之一,原代码每次处理城市都打开/关闭文件,还逐行写入,效率极低。上面的方案已经用writelines一次性写入所有行,再补充两个小技巧:

  • 用with语句管理文件上下文,不仅安全,还能减少手动关闭文件的开销;
  • 如果是覆盖写入而非追加,可以直接用w模式代替a+,避免文件指针移动的额外操作。

3. 用Pandas处理大数据:专业工具做专业事

如果你的数据量真的达到百万级甚至更高,纯Python循环还是不够快,直接用Pandas会爽很多——它底层用C实现了分组和IO操作,性能碾压纯Python:

import pandas as pd

# 把salesData转成DataFrame
df = pd.DataFrame(salesData)
# 按第3列(城市列)分组,然后写入对应文件
for city, group in df.groupby(2):
    # 直接用空格分隔写入,不用手动处理字符串
    group.to_csv(f"{city}.txt", sep=" ", index=False, header=False, mode="a+")

Pandas的groupby和to_csv都做了大量性能优化,百万级数据下比纯Python快几倍甚至几十倍。

4. 额外小优化:提前去重&减少内存占用

如果uniqueCity是自己生成的,其实完全不需要——分组后city_groups的key就是所有存在的城市,直接用这个key集合就行,省掉生成uniqueCity的步骤;另外,如果salesData里有重复数据,可以先去重再处理,减少后续的分组和写入工作量。


内容的提问来源于stack exchange,提问作者Hey Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:21:36