将包含'[',']'的字符串数组转换为int数组

时间:2018-04-09 17:26:39

标签: python

我正在尝试使用以下函数将字符串数组转换为浮点数组:

arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'

a1 = arr_str.split()

[int(x) for x in a1]

但抛出错误:

<

ipython-input-57-f7f1eaba7ebd> in <listcomp>(.0)
      3 a1 = arr_str.split()
      4 
----> 5 [int(x) for x in a1]
      6 
      7 # for a in arr_str.split():

ValueError: invalid literal for int() with base 10: '[1'

应该预处理字符串并删除'['和']'?

3 个答案:

答案 0 :(得分:3)

一种方法是使用ast.literal_eval

如果你需要一个numpy整数数组,转换是微不足道的。

import numpy as np
from ast import literal_eval

arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'

res = literal_eval(arr_str.replace(' ', ','))

# [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

res_np = np.array(res)

# array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

答案 1 :(得分:0)

arr_str = arr_str.strip("[]")
voila = [int(x) for x in arr_str.split()]

编辑1:对变量赋值迂腐。

答案 2 :(得分:0)

您可以使用ast模块:

import ast

arr_str = '[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]'

arr = ast.literal_eval(arr_str.replace(" ",", "))
arr = list(map(float,arr)) #Remove this line if you wish integer conversion.
print(arr)

输出:

[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

因为您在标题中说int,但在说明中说float