Python - 将字符串转换为数组
Python - convert string to array
我有一个字符串要转换为 python 中的数组。该字符串有几种可能的格式:
Xstart(xstep)Xend,X2
.
Xstart(xstep)Xend
X1,X2,X3
X1
例如:
6(6)24
应该给我 [6,12,18,24].
6(6)24,48
应该给我 [6,12,18,24,48]
6,24,42,50
应该给我 [6,24,42,50]
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] |
+------------+---------------------+---------------------+
我有一个字符串要转换为 python 中的数组。该字符串有几种可能的格式:
Xstart(xstep)Xend,X2
.Xstart(xstep)Xend
X1,X2,X3
X1
例如:
6(6)24
应该给我 [6,12,18,24].6(6)24,48
应该给我 [6,12,18,24,48]6,24,42,50
应该给我 [6,24,42,50]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] |
+------------+---------------------+---------------------+