如何根据条件从Python列表分割生成嵌套元组列表?
问题描述
现有一个存储字符串的列表,内容如下:
my_list = ['', 'EU NNP I-NP B-ORG', 'rejects VBZ I-VP O', 'British JJ I-NP B-MISC', '. . O O', '', 'Peter NNP I-NP B-PER', 'Blackburn NNP I-NP I-PER', '', 'BRUSSELS NNP I-NP B-LOC', '1996-08-22 CD I-NP O', '']
需求为:以列表中的空字符串作为分隔标记,将原列表拆分生成嵌套元组列表。
实现方案
通过单次遍历列表即可完成拆分,逻辑简单效率高,不需要引入额外依赖。
实现代码
list_of_tuples = [] current_group = [] for s in my_list: if not s: # 遇到空字符串分隔符 if current_group: list_of_tuples.append(current_group) current_group = [] else: current_group.append((s,)) # 非空内容转单元素元组存入当前分组 # 处理遍历结束后剩余的未收尾分组 if current_group: list_of_tuples.append(current_group)
运行上述代码得到的输出为:
[ [('EU NNP I-NP B-ORG',), ('rejects VBZ I-VP O',), ('British JJ I-NP B-MISC',), ('. . O O',)], [('Peter NNP I-NP B-PER',), ('Blackburn NNP I-NP I-PER',)], [('BRUSSELS NNP I-NP B-LOC',), ('1996-08-22 CD I-NP O',)] ]
注意事项
- 单元素元组必须在元素后加逗号,你给出的示例中
('xxx')实际是字符串类型,('xxx',)才是合法的单元素元组 - 作为分隔符的空字符串不会被存入最终结果,示例中最后一个分组包含空串的写法不符合分隔逻辑,上述代码会自动过滤这类分隔符
- 代码加了非空判断,即使原列表存在连续多个空字符串,也不会生成空的无效分组
内容的提问来源于stack exchange,提问作者omgpython
相关产品推荐
相关产品推荐

