Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
191 views
in Technique[技术] by (71.8m points)

python - How to change the string type list to a list type and then drop nan elements

I have a unique problem. I am facing two issues here. First, my list is a string type, not list type. Then, some of the elements in the list are nan. I want to drop them.

My code:

x = '[1.4,2.3,nan]'
print(type(x)) # prints str
x = eval(x) # with this I want to drop end quotes, convert it to list type
print(type(x))
x = [k for k in x if str(k)!='nan'] 

Present output:

NameError: name 'nan' is not defined

Expected output:

x = [1.4,2.3]
question from:https://stackoverflow.com/questions/66052748/how-to-change-the-string-type-list-to-a-list-type-and-then-drop-nan-elements

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Please don't use eval for anything if you're not acutely aware how unsafe it is. Instead, properly parse your input.

import math

s = '[1.4,2.3,nan]'
x = [float(n) for n in s.lstrip('[').rstrip(']').split(',')]
x = [n for n in x if not math.isnan(n)]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...