我看过这个solution,但我的要求略有不同。
我有一个表格形式的字符串:"command int1 int2"
,例如"download 600 10"
。
我知道我可以使用str.split(" ")
将字符串分解为其组成部分,但之后我必须将第2和第3个参数转换为int
s。因此,以下内容不起作用(int
强制转换在字符串中遇到"download"
时失败:
(cmd, int1, int2) = [int(s) for s in file.split(' ')]
我仍然对Python很陌生......所以我想知道是否有一种很好的,pythonic方式来实现我的目标?
答案 0 :(得分:4)
您可以将类型映射到值:
>>> types = (str, int, int)
>>> string = 'download 600 10'
>>> cmd, int1, int2 = [type(value) for type, value in zip(types, string.split())]
>>> cmd, int1, int2
('download', 600, 10)
答案 1 :(得分:1)
这取决于你对什么" pythonic"对你而言意味着,但这是另一种方式:
words = file.split(" ")
cmd, (int1, int2) = words[0], map(int, words[1:])
答案 2 :(得分:1)
标准库中没有更多Pythonic。我建议你做一些简单的事情,比如:
cmd = file.split(' ')
command = cmd[0]
arg1 = int(cmd[1])
arg2 = int(cmd[2])
你总是可以尝试寻找一个小解析器,但这样就太过分了。
答案 3 :(得分:1)
从here我导入了以下函数,该函数使用 isdigit() (see here):
def check_int(s): # check if s is a positive or negative integer
if s[0] in ('-', '+'):
return s[1:].isdigit()
return s.isdigit()
然后你只需要这段代码:
your_string = "download 600 10"
elements = your_string.split(" ")
goal = [int(x) for x in elements if check_int(x)]
cmd, (int1,int2) = elements[0], goal
答案 4 :(得分:0)
你可以这样做。
file = "downlaod 600 10"
file_list = file.split(' ')
for i in range(len(file_list)):
try:
file_list[i] = int(file_list[i])
except ValueError:
pass
(cmd, int1, int2) = file_list