Python如何将字符串格式关联数据的子元素拆分生成新数组
Python实现字符串转指定二维数组的方案
当然可以实现,而且不用写那么复杂的嵌套推导式,咱们一步步来拆解处理逻辑:
- 先清理原始字符串:去掉
limit:前缀,同时去掉所有空格,避免分割时出错 - 把清理后的字符串按逗号分割,得到每个
编号:列表的条目(比如1001:[1,2]) - 对每个条目,按冒号分割成编号字符串和列表字符串(比如
[1,2]) - 将编号转成整数,再把列表字符串去掉方括号、按逗号分割后转成整数,每个数字和编号配对成子数组
- 最后收集所有子数组得到目标结果
分步实现代码(可读性强)
my_array = 'limit: 1001: [1,2], 1002:[2,5], 1003:[1,2],1010:[1,3]' # 清理字符串,移除前缀和所有空格 clean_str = my_array.replace('limit: ', '').replace(' ', '') # 分割为单个条目 items = clean_str.split(',') result = [] for item in items: # 拆分编号和列表部分 num_str, list_str = item.split(':') num = int(num_str) # 处理列表字符串,转成整数列表 nums = [int(n) for n in list_str.strip('[]').split(',')] # 生成子数组并添加到结果 for n in nums: result.append([num, n]) print(result) # 输出:[[1001, 1], [1001, 2], [1002, 2], [1002, 5], [1003, 1], [1003, 2], [1010, 1], [1010, 3]]
简洁列表推导式版本
my_array = 'limit: 1001: [1,2], 1002:[2,5], 1003:[1,2],1010:[1,3]' result = [ [int(num_str), int(n)] for item in my_array.replace('limit: ', '').replace(' ', '').split(',') for num_str, list_str in [item.split(':')] for n in list_str.strip('[]').split(',') ] print(result)
关于你尝试的代码问题
你写的嵌套推导式逻辑过于复杂,多次无效替换),(原字符串里不存在该字符),还出现了无意义的split('(')操作,不仅可读性极差,还容易因为字符串格式的微小变动导致出错,建议用上面更清晰的方式实现。
内容的提问来源于stack exchange,提问作者Gabriel Felipe
相关产品推荐
相关产品推荐

