首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组范围作为字符串转换为数字

将数组范围作为字符串转换为数字
EN

Stack Overflow用户
提问于 2021-03-12 14:08:14
回答 3查看 72关注 0票数 2

我从一个刮过的STAAD Pro中得到以下数组。输入文件。

我想用实际范围代替TO

示例数组项:

代码语言:javascript
复制
[["638TO640"], ["3033", "3038", "4081", "4087"], ["601TO615", "617"]]

我希望这些数组项成为:

代码语言:javascript
复制
[[638, 639, 640], [3033, 3038, 4081, 4087], [601, 602, 603, 604,... 615, 617]]

是否有一种简单的琵琶转换方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-12 14:16:18

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

代码语言:javascript
复制
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))
代码语言:javascript
复制
>>> str_to_range('638TO640')
[638, 639, 640]
票数 3
EN

Stack Overflow用户

发布于 2021-03-12 14:20:31

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

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-03-12 14:38:37

代码语言:javascript
复制
mylist = [
    ["638TO640"],
    ["638TO6400"],
    ["3033", "3038", "4081", "4087"],
    ["601TO615", "617"],
]


def expand_range(str_numbers):
    numbers = []
    for num in str_numbers:
        try:
            numbers.append(int(num))
        except ValueError:
            start, end = num.split("TO")
            numbers.extend(range(int(start), int(end) + 1))

    return numbers


new_list = [expand_range(sublist) for sublist in mylist]

输出:

代码语言:javascript
复制
[
    [638, 639, 640],
    [3033, 3038, 4081, 4087],
    [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 617],
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66601447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档