【问题标题】:Converting a string representation of an array to an actual array in python [duplicate]将数组的字符串表示形式转换为python中的实际数组[重复]
【发布时间】:2013-12-14 22:38:57
【问题描述】:

您好,通过网络做一些事情,想知道是否有任何方法可以将 python 数组作为字符串转换回 python 数组。例如

x = "[1,2,3,4]"

将 x 转换为

x_array = [1,2,3,4]

如果它也适用于 numpy 多维数组,那就太好了!

【问题讨论】:

    标签: python arrays numpy type-conversion


    【解决方案1】:

    对于普通数组,使用ast.literal_eval:

    >>> from ast import literal_eval
    >>> x = "[1,2,3,4]"
    >>> literal_eval(x)
    [1, 2, 3, 4]
    >>> type(literal_eval(x))
    <type 'list'>
    >>>
    

    numpy.array 有点棘手,因为 Python 将它们呈现为字符串:

    >>> import numpy as np
    >>> x = [[1,2,3], [4,5,6]]
    >>> x = np.array(x)
    >>> x
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> x = str(x)
    >>> x
    '[[1 2 3]\n [4 5 6]]'
    >>>
    

    您可以使用的一个技巧是使用re.sub 将空格替换为逗号:

    >>> import re
    >>> x = re.sub("\s+", ",", x)
    >>> x
    '[[1,2,3],[4,5,6]]'
    >>>
    

    然后,您可以使用ast.literal_eval 并将其转回numpy.array

    >>> x = literal_eval(x)
    >>> np.array(x)
    array([[1, 2, 3],
           [4, 5, 6]])
    >>>
    

    【讨论】:

      【解决方案2】:
      Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
      >>> import json
      >>> json.loads("[1,2,3,4]")
      [1, 2, 3, 4]
      >>> 
      

      【讨论】:

      • 为什么你都回答并标记为重复?
      • 另外,这个答案已经在重复的线程中提到了。
      • @njzk2 哦,我没有看到另一个答案中提到 JSON 的部分。
      • @njzk2,您应该阅读链接问题中的答案 :) “问题应该关闭(然后删除),但请继续向提问者提供他们首先要寻找的答案,所以我们不要给他们留下绝对可怕的经历。”
      【解决方案3】:

      我建议您实际上并不想这样做。这种事情不会很容易扩展到发送,例如,你在网络上定义的类的实例。相反,我建议您使用picklejson 之类的东西将数据转换为字节,通过网络发送,然后再将数据转换回来。但是,在其他情况下,我总是使用ast.literal_eval。如果您指定如何通过网络发送数据,我将根据您的情况为您提供 pickle 的用法示例。

      【讨论】:

      • +1 提到泡菜。
      【解决方案4】:

      试试这个:

      x_array = [(int(y) if y.strip() else None) for y in x[1:-1].split(',')]
      

      【讨论】:

      • +1 但是,尽管我知道您要做什么,但我认为您应该在此周围添加一个 list(filter(lamda x: x is not None, 以去除 None 值。
      【解决方案5】:

      如果您确定字符串总是具有这种结构,您可以删除括号并拆分字符串:

      x_array = [int(y) for y in x[1:-1].split(',') if y.strip()]
      

      【讨论】:

      • akaRem ??这是列表的无效语法。没人在乎。字符串应该包含有效的列表表示。
      • 中断x = "[1, 2, 3, 4, 5, ]"
      • 修复了它使用条检查空字符串。
      猜你喜欢
      • 2013-08-07
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2015-05-25
      • 2016-12-17
      • 2023-03-03
      相关资源
      最近更新 更多