Python如何将长字符串列表批量拆分为短字符串组成的新列表
问题描述
核心需求如下:
- 将
小说文本拆分为独立章节存入列表后,批量把每个章节拆分为单块1000词的文本块,最终为每个章节生成对应分块的子列表 - 已完成单章节的拆分逻辑,仅需适配批量处理场景,同时需要评估列表、字典、数据框三类存储结构的适用性
已实现的单章节拆分代码如下:
text = chapters[1] text = text.split() n = 1000 batch = [' '.join(text[i:i+n]) for i in range(0,len(text),n)]
批量处理实现方案
直接遍历章节列表,复用已写好的单章节分块逻辑即可,不需要额外复杂依赖:
n = 1000 # 定义单文本块的词数 chapter_chunks = [] for chapter in chapters: words = chapter.split() # 直接复用原有分块逻辑 current_chapter_chunks = [' '.join(words[i:i+n]) for i in range(0, len(words), n)] chapter_chunks.append(current_chapter_chunks)
最终得到的chapter_chunks是二维列表,索引和原chapters列表完全对应:chapter_chunks[0]就是第一章的所有1000词分块,chapter_chunks[1]就是第二章的分块,以此类推。
如果追求代码简洁,也可以写成嵌套列表推导式:
n = 1000 chapter_chunks = [ [' '.join(words[i:i+n]) for i in range(0, len(words), n)] for words in [chapter.split() for chapter in chapters] ]
这种写法只会对每个章节执行一次split(),不会有额外性能损耗。
不同存储结构的选择建议
- 二维列表:就是上面给出的方案,适合仅需按章节顺序遍历分块、不需要按章节特征检索的场景,写法最简单,内存占用最低,是这类需求的首选。
- 字典:如果后续需要按章节名、章节号快速定位对应分块,字典是更优选择。可以用章节序号、章节标题作为键,对应章节的分块列表作为值,检索时不需要遍历全量数据,效率更高。参考实现:
n = 1000 chapter_chunk_map = {} for chapter_idx, chapter in enumerate(chapters, start=1): words = chapter.split() chunks = [' '.join(words[i:i+n]) for i in range(0, len(words), n)] chapter_chunk_map[f"第{chapter_idx}章"] = chunks
后续需要取指定章节分块时,直接通过键取值即可,比如取第三章分块用chapter_chunk_map["第3章"]。
- Pandas数据框:除非你后续需要做文本统计、特征工程、对接模型训练这类分析类工作,否则不推荐使用。数据框存储纯文本分块的内存开销远高于列表和字典,日常分块读写的操作也更繁琐,没有明确分析需求时没必要用。
内容的提问来源于stack exchange,提问作者StrikeX
相关产品推荐
相关产品推荐

