当我输入以下内容时:
>>>tokenize('<[2{12.5 6.0}](3 -4 5)>')我想要找回这个:
['<', '[', 2, '{', 12.5, 6.0, '}', ']', '(', 3, -4, 5, ')', '>']基本上,我如何保持它,以便输入将所有内容转换到列表中,同时保持数字的原始值。
发布于 2013-08-01 12:37:40
你可以尝试使用tokenizer,除了像-4这样的负数之外,它给出的结果几乎和你预期的一样,但它非常接近。
from StringIO import StringIO
import tokenize
str = '<[2{12.5 6.0}](3 -4 5)>'
tokens = tokenize.generate_tokens(StringIO(str).readline)
result = [x[1] for x in tokens]结果如下:
['[', '2', '{', '12.5', '6.0', '}', ']', '(', '3', '-', '4', '5', ')', '>', '']发布于 2013-08-01 12:28:24
因此,要对其进行暴力强制,您可以使用list(your_string),但一定要确定应该将哪些内容组合在一起,并在执行过程中将项目附加到元素中。
其他解决方案可以使用正则表达式、简单的语法库等,而且可以说更容易理解。
编辑:对于非整数#,您还可以注意到,当遇到这样的数字时,继续并修改新的、解析的标记列表的前一个索引,当您到达下一个数字、闭包、标记等时,您将在列表中创建一个全新的元素。
假设您将所有内容都作为字符串放入一个新列表中,下面是一种取回浮点数和整型数的方法:
for i, e in enumerate(tokenized):
if e.isdigit():
tokenized[i] = int(e)
elif '.' in e:
tokenized[i] = float(e)
elif '-' in e and not '.' in e:
tokenized[i] = int(e)最终结果就是您想要的结果:
['<', '[', 2, '{', 12.5, 6.0, '}', ']', '(', 3, -4, 5, ')', '>']发布于 2013-08-01 12:29:59
re.split可能就是您想要的。请参阅similar question here。
将字符串拆分成列表后,可以遍历它,并使用int()和float()将数字成员转换为实际数字。
https://stackoverflow.com/questions/17985197
复制相似问题