使用“try”进行列表循环操作

时间:2016-03-07 09:33:49

标签: python python-2.7

我有一个值列表,可以是字符串,如“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”]

4 个答案:

答案 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]