如何将含集合列表的字符串转为列表且保留集合内元素顺序?
保留集合字符串中元素顺序的解决方案
因为Python的set本身是无序容器(即使3.7+版本的set会保留插入顺序,但ast.literal_eval解析字符串中的集合时,并不会遵循原字符串里的元素顺序),所以不能通过解析集合的方式来保留顺序,直接对字符串进行结构处理是更可靠的方式。
以下是两种可行的实现方法:
方法一:正则表达式匹配替换
通过正则提取每个集合内的元素内容,再重新用方括号包裹:
import re # 原始字符串(注意去掉外层的单引号,实际使用时根据输入调整) input_str = '[{13,18},{14,19}]' # 匹配所有{...}格式的内容,提取内部元素 element_groups = re.findall(r'\{([^}]+)\}', input_str) # 将每个元素组用方括号包裹,组成目标列表 result = [f'[{group}]' for group in element_groups] print(result) # 输出: ['[13,18]', '[14,19]']
方法二:字符串分割与替换
直接修改字符串中的括号符号,再拆分出每个元素:
input_str = '[{13,18},{14,19}]' # 去掉字符串首尾的[],拆分出每个集合的内容 inner_content = input_str.strip('[]') item_list = inner_content.split('},{') # 给每个元素添加方括号,组成结果列表 result = [f'[{item}]' for item in item_list] print(result) # 输出: ['[13,18]', '[14,19]']
这两种方法都不会解析为set类型,而是直接保留原字符串中的元素顺序,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jayant Jain
相关产品推荐
相关产品推荐

