【问题标题】:How to convert a delimited string back to list in Python如何将分隔字符串转换回Python中的列表
【发布时间】:2021-07-01 11:55:59
【问题描述】:

我有一个分隔字符串如下,

list1 = ['[107 207]', '[110 245]', '[115 282]', '[120 320]']

如何在 Python 中将其转换回列表?转换后的列表应如下所示:

[[107 207]
[110 245]
[115 282]
[120 320]]

我试过 list1 = list1.split(",")。但是,当我打印 list[0] 时,我得到了这个,

['[107 207]'

而不是得到这个,

[107 207]

另外,尝试 list1 = [int(e) for e in list1.split(',')] 给了我如下错误:

"invalid literal for int() with base 10: \"['[107 207]'\""

【问题讨论】:

    标签: python-3.x string list


    【解决方案1】:

    一个选项,使用嵌套列表推导以及re.findall 来提取所有数字:

    list1 = ['[107 207]', '[110 245]', '[115 282]', '[120 320]']
    output = [[int(y) for y in re.findall(r'\d+', x)] for x in  list1]
    print(output)
    

    打印出来:

    [[107, 207], [110, 245], [115, 282], [120, 320]]
    

    可能有一种方法可以在不调用正则表达式的情况下执行此操作,但考虑到输入数字在字符串中开始,int() 强制转换对我来说似乎是强制性的。

    【讨论】:

    • 这对我来说适用于我在这里提到的小集合,但会给出 [[]、[]、[]、[1]、[0]、[7]、[]、[ 2]、[0]、[7]……] 在更大的列表中。我不知道为什么!
    • 将真实数据添加到您的问题中。
    【解决方案2】:

    你可以去掉每个元素末端的括号。这种方法可能更简洁,但它在纯 Python 中完成的,没有导入或正则表达式。

    input = ['[107 207]', '[110 245]', '[115 282]', '[120 320]']
    
    output = [[int(ii) for ii in i.lstrip("[").rstrip("]").split(" ")] for i in input]
    

    这将返回您想要的内容:

    [[107, 207], [110, 245], [115, 282], [120, 320]]
    

    这是一种人类可读的代码形式,有助于可视化正在发生的事情:

    output = []
    
    for item in input:
        itemString = item.lstrip("[")
        itemString = itemString.rstrip("]")
        itemList = itemString.split(" ")
        itemNumbers = [int(ii) for ii in itemList]
        output.append(itemNumbers)
    

    【讨论】:

    • 给我一个错误“invalid literal for int() with base 10: ' '”
    • @anjali 这两个有效答案都失败了,这表明您的数据是问题所在,也许您有一些非数值。
    • @anjali 我同意蒂姆的观点;这两种方法都适用于您提供给我们的数据集;如果您使用的数据集格式略有不同,则应编辑您的问题以反映它。
    • @Tim 看来你是对的。我复制了整个字符串并在 Python3 命令行中尝试了它,它工作正常。
    • 是的,他们是!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多