我有一个值列表,可以是字符串,如“string”,也可以是字符串格式为“2.3”的数字
我想将某些值的字符串转换为数字(“N / A” - > -1)并保持其他任何字符串不变,而且我需要转换字符串中给出的数字,浮点格式为字符串格式(“1.0” - > 1) 等。
如果我第一次遍布整个列表并将N / A值转换为-1,我就设法这样做了
for i in list:
if i=="N/A":
i=-1
然后使用
运行l = [int(i) for i in l]
但是我仍然可能有字符串,除了“N / A”,我不想在尝试转换它们时遇到麻烦,并且需要在第二个循环中使用try。 我怎样才能做到这一点?
这是我尝试的代码,但我给了我语法错误
l = [try: int(float(i)) except: pass] for i in l
原点列表示例:[“1.0”,“N / A”,“lol”]我需要它是[1,-1,“lol”]
答案 0 :(得分:3)
使用try except
,如果发生异常并尝试int
,请尝试转换为"N/A"
,以便-1
替换它:
li = ["1.0" , "N/A" , "12" , "2.0", "Ok"]
for i,v in enumerate(li):
try:
li[i] = int(float((v)))
except:
if(li[i] == "N/A"):
li[i] = -1
li # [1, -1, 12, 2, "Ok"]
答案 1 :(得分:2)
def convert(value):
if value == 'N/A':
return -1
try:
return int(value)
except ValueError:
return value
然后:
[convert(value) for value in values]
答案 2 :(得分:0)
在一个循环中完成。
l = ["N/A", "3", "5", "6"]
for idx,val in enumerate(l):
try:
l[idx] = int(val)
except:
l[idx] = -1
print l
<强>输出强>
[-1, 3, 5, 6]
答案 3 :(得分:0)
您可以在自己的函数中封装try-except语句,并在列表解析中使用它。
def try_int(s):
try:
return int(s)
except ValueError:
return s
l = [try_int(i) for i in l]