如何做2维str分裂

时间:2016-09-06 16:22:14

标签: python python-3.x

我有一个字符串看起来(请注意我给的范围是1.1到1.3),

"1.1-1.3 ,1.5, 2.5"

我想要一个看起来像的二维数组

[1][1],
[1][2] , <== range is filled now
[1][3] ,
[1][5],
[2][5],

我对Python不太满意。我知道必须有一个更好的方法来完成这几行代码。有人可以帮忙吗?我正在使用3.4

1 个答案:

答案 0 :(得分:1)

点子:

  1. 删除所有空格:'1.1-1.3 ,1.5, 2.5'
  2. 使用逗号分隔输入:'1.1-1.3,1.5,2.5'
  3. 将它们分解为数字或范围:[(1, 1, 1, 3), (1, 5), (2, 5)]
  4. 生成数据并将其附加到列表中:[[1, 1], [1, 2], [1, 3], [1, 5], [2, 5]]
  5. 代码:

    import re
    
    s = '1.1 -1.3 ,1.5, 2.5'
    items = s.replace(' ', '').split(',')
    
    result = []
    for item in items:
        v = list(map(
            lambda x: int(x) if x else None,
            re.match(r'(\d+).(\d+)(?:-(\d+).(\d+))?', item).groups()
        ))
        if not v[2]:
            result.append(v[:2])
        else:
            result.extend([[v[0], i] for i in range(v[2], v[3] + 1)])
    
    print(result)