Python - 将字符串转换为数组

Python - convert string to array

我有一个字符串要转换为 python 中的数组。该字符串有几种可能的格式:

  1. Xstart(xstep)Xend,X2.
  2. Xstart(xstep)Xend
  3. X1,X2,X3
  4. X1

例如:

  1. 6(6)24 应该给我 [6,12,18,24].
  2. 6(6)24,48 应该给我 [6,12,18,24,48]
  3. 6,24,42,50 应该给我 [6,24,42,50]
  4. 6 应该给我 [6]

一个不使用正则表达式的天真的解决方案可能只是在 ',' 上拆分,然后查找是否存在左括号,指示是否存在 step:

from prettytable import PrettyTable
from typing import NamedTuple

def str_to_extracted_list(s: str) -> list[int]:
    extracted_list = []
    s_parts = s.split(',')
    for part in s_parts:
        if '(' in part:
            opening_pos = part.find('(')
            ending_pos = part.find(')')
            start = int(part[:opening_pos])
            step = int(part[part.find('(') + 1:part.find(')')])
            end = int(part[ending_pos + 1:])
            x = start
            while x <= end:
                extracted_list.append(int(x))
                x += step
        else:
            extracted_list.append(int(part))
    return extracted_list

class TestCase(NamedTuple):
    s: str
    expected: list[int]

def main() -> None:
    t = PrettyTable(['s', 'expected', 'actual'])
    t.align = 'l'
    for s, expected in [TestCase(s='6(6)24', expected=[6, 12, 18, 24]),
                        TestCase(s='6(6)24,48', expected=[6, 12, 18, 24, 48]),
                        TestCase(s='6,24,42,50', expected=[6, 24, 42, 50]),
                        TestCase(s='6', expected=[6])]:
        t.add_row([s, expected, str_to_extracted_list(s)])
    print(t)

if __name__ == '__main__':
    main()

输出:

+------------+---------------------+---------------------+
| s          | expected            | actual              |
+------------+---------------------+---------------------+
| 6(6)24     | [6, 12, 18, 24]     | [6, 12, 18, 24]     |
| 6(6)24,48  | [6, 12, 18, 24, 48] | [6, 12, 18, 24, 48] |
| 6,24,42,50 | [6, 24, 42, 50]     | [6, 24, 42, 50]     |
| 6          | [6]                 | [6]                 |
+------------+---------------------+---------------------+