Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能转换;[nan,1,2,3]”;要列出的字符串[nan,1,2,3]?_Python_String_List - Fatal编程技术网

Python 我怎样才能转换;[nan,1,2,3]”;要列出的字符串[nan,1,2,3]?

Python 我怎样才能转换;[nan,1,2,3]”;要列出的字符串[nan,1,2,3]?,python,string,list,Python,String,List,如何将“[nan,1,2,3]”字符串转换为列表[nan,1,2,3] 如果我使用 from ast import literal_eval literal_eval("[1,2,3]") 我明白了 但是,如果我尝试转换包含nan的字符串,则会出现以下错误: File "<unknown>", line 1 [nan 1 2 3 ^ SyntaxError: invalid syntax Pro

如何将
“[nan,1,2,3]”
字符串转换为列表
[nan,1,2,3]

如果我使用

    from ast import literal_eval

    literal_eval("[1,2,3]")
我明白了

但是,如果我尝试转换包含
nan
的字符串,则会出现以下错误:

    File "<unknown>", line 1
        [nan  1  2  3
           ^
    SyntaxError: invalid syntax

    Process finished with exit code 1
文件“”,第1行
[nan 1 2 3
^
SyntaxError:无效语法
进程已完成,退出代码为1

使用
numpy.fromstring

>>> s = '[nan, 1, 2, 3]'
>>> import numpy as np
>>> a = np.fromstring(s[1:-1], sep=', ')
>>> a
array([ nan,   1.,   2.,   3.])
>>> 

您可以将
NaN
替换为有效python的
None
,然后使用
literal\u eval

s = "[nan,1,2,3]"

literal_eval(s.replace('nan', 'None'))
# [None, 1, 2, 3]

尝试使用
np.fromstring

Ex:

import numpy as np

lst = '[nan  1  2  3]'
print(np.fromstring(lst.strip("[]"), sep=' '))
#-->[nan  1.  2.  3.]

如果您愿意使用numpy,可以使用浮点的隐式类型转换(注意,对于整数,没有nan)


输入<代码>[nan 1 2 3中甚至没有逗号,您不能将
文字评估
与它一起使用。
eval
可以this@DustyPosa埃瓦尔做到了,但非常糟糕practice@DustyPosa我认为通常应该避免使用
eval
,因为您可以向其中注入任何代码。如果只是为了您,您可能会侥幸逃脱,但通常情况下e通常是更好、更健壮的解决方案。这是一个真正的NaN还是字符串“NaN”?我假设OP想要
np.NaN
@BramVanroy real Nant这是
fromstring
方法的优点,它创建了一个numpy数组,其中所有值都具有相同的数据类型。因此,即使您愿意,也不能将浮点数与字符串混合使用y都是浮点数,即使nan也是。@Magellan88是一个非常优雅的解决方案。我想说这是最具python风格的解决方案,尤其是对任何人来说都非常明确的
.strip(“[]”
)。
import numpy as np

lst = '[nan  1  2  3]'
print(np.fromstring(lst.strip("[]"), sep=' '))
#-->[nan  1.  2.  3.]
import numpy as np    
a = "[nan 1 2 3]"
np.array(a[1:-1].split(), dtype="f")
#array([nan,  1.,  2.,  3.], dtype=float32)