当前位置:  开发笔记 > 编程语言 > 正文

将字符串拆分为各种数据类型

如何解决《将字符串拆分为各种数据类型》经验,为你挑选了2个好方法。

我想转换以下字符串:

s = '1|2|a|b'

[1, 2, 'a', 'b']

是否可以在一行中进行转换?



1> Bhargav Rao..:

是否可以在一行中进行转换?

是的,有可能.但是怎么样?

该方法的算法

使用将字符串拆分为其组成部分str.split.这个的输出是

>>> s = '1|2|a|b'
>>> s.split('|')
['1', '2', 'a', 'b']

现在我们有一半的问题.接下来,我们需要循环遍历拆分字符串,然后检查它们中的每一个是字符串还是int.为此,我们使用

一个列表的理解,这对循环部分

str.isdigit用于查找元素是a int还是a str.

列表理解可以很容易地写成[i for i in s.split('|')].但是我们如何在那里添加一个if条款呢?这在单行列表理解中有所介绍:if-else变体.现在我们知道哪些元素都是int,哪些不是,我们可以轻松地调用内置元素int.

因此最终的代码看起来像

  [int(i) if i.isdigit() else i for i in s.split('|')]

现在进行一个小型演示,

>>> s = '1|2|a|b'
>>> [int(i) if i.isdigit() else i for i in s.split('|')]
[1, 2, 'a', 'b']

我们可以看到,输出是预期的.


请注意,如果要转换的类型很多,则此方法不适用.



2> Padraic Cunn..:

您不能在一行中对负数或许多混合类型执行此操作,但可以使用适用于多种类型的函数,方法是ast.literal_eval

from ast import  literal_eval
def f(s, delim):
    for ele in s.split(delim):
        try:
            yield literal_eval(ele)
        except ValueError:
            yield ele

s = '1|-2|a|b|3.4'

print(list(f(s,"|")))
[1, -2, 'a', 'b', 3.4]

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有