Python 将字符串形式的数组范围转换为数字

Python 将字符串形式的数组范围转换为数字,python,python-3.x,Python,Python 3.x,我有以下阵列从刮斯塔德专业。输入文件 我想用实际范围替换到 示例数组项: [["638TO640"], ["3033", "3038", "4081", "4087"], ["601TO615", "617"]] 我希望这些数组项成为: [[638, 639, 640], [3033, 3038, 4081, 4087], [601, 602, 603,

我有以下阵列从刮斯塔德专业。输入文件

我想用实际范围替换

示例数组项:

[["638TO640"], ["3033", "3038", "4081", "4087"], ["601TO615", "617"]]
我希望这些数组项成为:

[[638, 639, 640], [3033, 3038, 4081, 4087], [601, 602, 603, 604,... 615, 617]]

有没有一种简单的pythonic方法来实现转换?

只需使用正则表达式解析字符串中的两个数字,然后创建一个
范围
对象:

import re

def str_to_range(s):
    begin, end = re.match(r'(\d+)TO(\d+)', s).groups()
    return list(range(int(begin), int(end) + 1))

您所需要的只是一些简单的字符串处理:

from typing import List
from itertools import chain

def range_to_numbers(staad_list: List[List[str]])-> List[List[int]]:
    new_list = []
    for slist in staad_list:
        for i in range(len(slist)):
            if slist[i].isnumeric(): slist[i] = [int(slist[i])]
            elif 'to' in slist[i].strip().lower():
                try:
                    to_idx = slist[i].lower().find('to')
                    start, end = int(slist[i][:to_idx]), int(slist[i][to_idx+2:])
                    slist[i] = [i for i in range(start, end)]
                except ValueError: print('Invalid key'); exit()
        new_list.append(list(chain(*slist)))
    return new_list

# run it with range_to_numbers(your_array)
mylist=[
[“638至640”],
[“638至6400”],
["3033", "3038", "4081", "4087"],
[“601至615”、“617”],
]
def扩展_范围(str_编号):
数字=[]
对于str_编号中的num:
尝试:
数字。追加(int(num))
除值错误外:
开始,结束=num.split(“TO”)
扩展(范围(整数(开始),整数(结束)+1))
返回号码
new_list=[为mylist中的子列表扩展_范围(子列表)]
输出:

[
    [638, 639, 640],
    [3033, 3038, 4081, 4087],
    [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 617],
]

谢谢,我使用itertools退货列表中的链(链(范围(int(begin),int(end)+1))对退货进行了修改。对不起,我忘记了
范围。我认为您不需要
。请阅读
[
    [638, 639, 640],
    [3033, 3038, 4081, 4087],
    [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 617],
]