将字符串拆分为整数的最佳Python方法

6mzjoqzu  于 2023-01-29  发布在  Python
关注(0)|答案(4)|浏览(135)

我有一个字符串,需要验证它的形式是否为'#-#',其中#应该是无符号整数。将其拆分为两个整数lo和hi的最简单的方法是什么,可能包括类型检查/验证lo〈hi,无符号整数,等等?
我考虑过各种各样的解决方案,但我有不同的标准,它必须确保#和#是无符号整型,中间只有一个连字符。

tzxcd3kk

tzxcd3kk1#

我不确定这是否是最****的pythong方法,但是我会拆分-字符,并使用列表解析生成lohi

[lo, hi] = [int(x) for x in s.split('-')]
shyt4zoc

shyt4zoc2#

你可以试试这样的方法:

string = "43-3" #example data
num = string.split("-") #split the string

lo = int(num[0])
hi = int(num[1])

if(lo<hi):
  print("ok")
else:
  print("ko")

只要你的字符串和你告诉我们的完全一样,并且字符串中只有无符号的整型,这个方法就可以工作。

0kjbasz6

0kjbasz63#

我能想到的最好的方法是使用正则表达式来匹配确切的模式和assert,以确保一切都正确。但是请注意,这样做会在出现无效输入时立即使程序崩溃,除非您做一些额外的错误处理。

import re

input_strings = [
    "123-321",
    "92646-278364",
    # "12345-123",  # error: low > high
    # "123.45-98765",  # error: not integers
]

def get_num_pair(num_str: str):
    m = re.match(r'(\d+)-(\d+)', num_str)
    assert m and len(m.groups()) == 2
    lo, hi = int(m.group(1)), int(m.group(2))
    assert 0 <= lo <= hi
    return lo, hi

for input_str in input_strings:
    print(get_num_pair(input_str))
x4shl7ld

x4shl7ld4#

在Mureinik回答的基础上,我建议你做以下事情:

  • 使用列表解析在'-'上拆分列表,并将每个位转换为int
  • 对生成的列表进行验证,以确保它满足您的要求-正好两个元素,第一个元素较低
  • 将其 Package 在tryexcept块中,以防列表解析出错
  • that Package 在一个封装了拆分#-#字符串概念的函数中

例如:

def parse_twoval_str(twoval_str):
    try:
        vals = [int(s) for s in twoval_str.split("-")]

    except ValueError:
        raise ValueError("Could not parse input - must be of form '123-234'")

    if len(vals) != 2:
        raise ValueError("Input must contain two values")

    a, b = vals

    if a > b:
        raise ValueError("First value must be less than second value")

    return a, b

相关问题