如何以空字符串("")为分隔符分割Python列表?
看来你是想把这个夹杂大量空字符串的工单列表,以空串为分隔符分割成一个个独立的工单信息组对吧?这在处理这类结构化但格式有点杂乱的列表时很常见,我给你两种实用的实现方法:
方法一:手动遍历分组(逻辑清晰易理解)
这种方法通过遍历列表,手动收集非空元素,遇到空串时就把当前收集的有效信息组存入结果,适合刚接触Python的朋友快速理解逻辑:
original_list = ['', u'WO0000008971346', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971321', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971307', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971247', u'', u'Low', u'Pending', u'Client Action Required', u'17/04/2018 15:08:49','', u'WO0000008971245',u'', u'Low', u'Pending', u'Client Action Required', u'17/04/2018 15:07:10','', u'WO0000008971235', u'', u'Low', u'In Progress...'] result = [] current_group = [] for item in original_list: if item != '': # 非空元素加入当前工单组 current_group.append(item) else: # 遇到空串时,如果当前组有内容,就存入结果并重置 if current_group: result.append(current_group) current_group = [] # 处理列表末尾的最后一组(避免遗漏) if current_group: result.append(current_group) # 输出结果 for idx, group in enumerate(result, 1): print(f"工单 {idx}: {group}")
运行后会得到每个工单的有效信息组:
工单 1: ['WO0000008971346', 'Low', 'Assigned'] 工单 2: ['WO0000008971321', 'Low', 'Assigned'] 工单 3: ['WO0000008971307', 'Low', 'Assigned'] 工单 4: ['WO0000008971247', 'Low', 'Pending', 'Client Action Required', '17/04/2018 15:08:49'] 工单 5: ['WO0000008971245', 'Low', 'Pending', 'Client Action Required', '17/04/2018 15:07:10'] 工单 6: ['WO0000008971235', 'Low', 'In Progress...']
方法二:使用itertools.groupby简化实现(简洁高效)
如果你熟悉Python标准库,itertools.groupby可以帮你一行搞定分组逻辑,它会自动把连续的相同特征元素归类:
from itertools import groupby original_list = ['', u'WO0000008971346', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971321', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971307', u'', u'Low', u'Assigned', u'', u'', '', u'WO0000008971247', u'', u'Low', u'Pending', u'Client Action Required', u'17/04/2018 15:08:49','', u'WO0000008971245',u'', u'Low', u'Pending', u'Client Action Required', u'17/04/2018 15:07:10','', u'WO0000008971235', u'', u'Low', u'In Progress...'] # 按元素是否非空分组,只保留非空元素的组 result = [list(group) for key, group in groupby(original_list, lambda x: x != '') if key] # 输出结果 for idx, group in enumerate(result, 1): print(f"工单 {idx}: {group}")
这个方法的逻辑和手动遍历是一致的,但代码更简洁,适合处理大规模数据时使用。
内容的提问来源于stack exchange,提问作者Hiddenx
相关产品推荐
相关产品推荐

