首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中将字符串转换为标记列表?

如何在Python中将字符串转换为标记列表?
EN

Stack Overflow用户
提问于 2013-08-01 12:16:27
回答 9查看 8K关注 0票数 3

当我输入以下内容时:

代码语言:javascript
复制
>>>tokenize('<[2{12.5 6.0}](3 -4 5)>')

我想要找回这个:

代码语言:javascript
复制
['<', '[', 2, '{', 12.5, 6.0, '}', ']', '(', 3, -4, 5, ')', '>']

基本上,我如何保持它,以便输入将所有内容转换到列表中,同时保持数字的原始值。

EN

回答 9

Stack Overflow用户

发布于 2013-08-01 12:37:40

你可以尝试使用tokenizer,除了像-4这样的负数之外,它给出的结果几乎和你预期的一样,但它非常接近。

代码语言:javascript
复制
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]

结果如下:

代码语言:javascript
复制
['[', '2', '{', '12.5', '6.0', '}', ']', '(', '3', '-', '4', '5', ')', '>', '']
票数 2
EN

Stack Overflow用户

发布于 2013-08-01 12:28:24

因此,要对其进行暴力强制,您可以使用list(your_string),但一定要确定应该将哪些内容组合在一起,并在执行过程中将项目附加到元素中。

其他解决方案可以使用正则表达式、简单的语法库等,而且可以说更容易理解。

编辑:对于非整数#,您还可以注意到,当遇到这样的数字时,继续并修改新的、解析的标记列表的前一个索引,当您到达下一个数字、闭包、标记等时,您将在列表中创建一个全新的元素。

假设您将所有内容都作为字符串放入一个新列表中,下面是一种取回浮点数和整型数的方法:

代码语言:javascript
复制
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)

最终结果就是您想要的结果:

代码语言:javascript
复制
['<', '[', 2, '{', 12.5, 6.0, '}', ']', '(', 3, -4, 5, ')', '>']
票数 0
EN

Stack Overflow用户

发布于 2013-08-01 12:29:59

re.split可能就是您想要的。请参阅similar question here

将字符串拆分成列表后,可以遍历它,并使用int()float()将数字成员转换为实际数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17985197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档