我想知道是否有更好的方法来执行以下操作:
我有一个字符串列表,实际上可能是浮点数,字母和其他字符,如“ - ”和“*”:
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', '*']
你们有什么事?
答案 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]