Convert a list of strings to either int or float
我有一个列表,看起来像这样:
1 | ['1', '2', '3.4', '5.6', '7.8'] |
如何将前两个改为
我希望我的列表如下所示:
1 | [1, 2, 3.4, 5.6, 7.8] |
号
在列表理解中使用条件
1 2 3 | >>> s = ['1', '2', '3.4', '5.6', '7.8'] >>> [float(i) if '.' in i else int(i) for i in s] [1, 2, 3.4, 5.6, 7.8] |
指数的有趣边缘情况。您可以添加到条件中。
1 2 3 | >>> s = ['1', '2', '3.4', '5.6', '7.8' , '1e2'] >>> [float(i) if '.' in i or 'e' in i else int(i) for i in s] [1, 2, 3.4, 5.6, 7.8, 100.0] |
号
使用
1 2 3 | >>> s = ['1', '2', '3.4', '5.6', '7.8'] >>> [int(i) if i.isdigit() else float(i) for i in s] [1, 2, 3.4, 5.6, 7.8, 100.0] |
为什么不使用
1 2 3 | import ast [ast.literal_eval(el) for el in lst] |
。
应处理所有角箱。对于这个用例来说,它有点重,但是如果您希望处理列表中的任何数字(如字符串),就可以做到这一点。
使用助手函数:
1 2 3 4 5 | def int_or_float(s): try: return int(s) except ValueError: return float(s) |
。
然后使用列表理解应用函数:
1 | [int_or_float(el) for el in lst] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def st_t_onumber(x): import numbers # if any number if isinstance(x,numbers.Number): return x # if non a number try convert string to float or it for type_ in (int, float): try: return type_(x) except ValueError: continue l = ['1', '2', '3.4', '5.6', '7.8'] li = [ st_t_onumber(x) for x in l] print(li) [1, 2, 3.4, 5.6, 7.8] |
使用字符串的isDigit方法:
1 | numbers = [int(s) if s.isdigit() else float(s) for s in numbers] |
。
或使用地图:
1 | numbers = map(lambda x: int(x) if x.isdigit() else float(x), numbers) |
。
如果要显示为同一列表,请使用以下查询附加该列表:
1 2 | item = input("Enter your Item to the List:") shopList.append(int(item) if item.isdigit() else float(item)) |
在这里,当用户输入int值或浮点值时,它会附加列表shopList并将这些值存储在其中。