字符串/浮点数的圆形列表,如果大于x

时间:2013-07-24 08:39:49

标签: python list-comprehension rounding floating

我想知道是否有更好的方法来执行以下操作:

我有一个字符串列表,实际上可能是浮点数,字母和其他字符,如“ - ”和“*”:

mylist = ["34.59","0.32","-","39.29","E","0.13","*"]

我要创建一个新的列表,它遍历mylist并检查一个项目是否大于0.50,如果是,那么该项应该四舍五入到最接近的整数,如果没有,那么它应该保持不变,附加到新列表。

这是我所拥有的,这有效,但我想知道是否有更好的方法:

for item in mylist:
    try:
        num = float(item) 
        if num > 0.50:
            newlist.append(str(int(round(num))))
        else:
            newlist.append(item)
    except ValueError:
        newlist.append(item)

print newlist

输出:

['35', '0.32', '-', '39', 'E', '0.13', '*']

你们有什么事?

3 个答案:

答案 0 :(得分:1)

如果列表中的值可以用x[0].isdigit()分隔,则可以使用列表推导。这意味着您的列表中不会有'''2E''-3''.35'

>>> [str(int(round(float(x)))) if x[0].isdigit() and float(x) > 0.50 else x for x in mylist] 
['35', '0.32', '-', '39', 'E', '0.13', '*']
>>> 

答案 1 :(得分:0)

如何制作一个功能?

def round_gt_05(x):
    try:
        num = float(x)
        if num > 0.5:
            return str(int(round(num)))
    except ValueError:
        pass
    return x

mylist = ["34.59","0.32","-","39.29","E","0.13","*"]
newlist = map(round_gt_05, mylist)
print newlist

答案 2 :(得分:0)

你也可以尝试一下。

def isfloatstring(instr):
    try:
         float(instr)
    except ValueError:
         return False
    return True


[str(int(round(float(n)))) if isfloatstring(n) and float(n) > 0.5 else n for n in listtemp]