我的列表看起来像这样:
['1', '2', '3.4', '5.6', '7.8']
如何将前两个更改为int
,将前三个更改为float
?
我希望我的列表看起来像这样:
[1, 2, 3.4, 5.6, 7.8]
答案 0 :(得分:11)
使用conditional inside a list comprehension
>>> 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]
指数的有趣边缘情况。您可以添加到条件。
>>> 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]
使用isdigit
是最好的,因为它会处理所有边缘情况(Steven中的comment提到)
>>> 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 :(得分:6)
使用帮助函数:
def int_or_float(s):
try:
return int(s)
except ValueError:
return float(s)
然后使用列表推导来应用函数:
[int_or_float(el) for el in lst]
答案 2 :(得分:6)
为什么不使用ast.literal_eval
?
import ast
[ast.literal_eval(el) for el in lst]
应处理所有角落案件。这个用例有点重量级,但是如果你希望在列表中处理任何类似数字的字符串,那就行了。
答案 3 :(得分:1)
使用字符串的 isdigit 方法:
numbers = [int(s) if s.isdigit() else float(s) for s in numbers]
或使用地图:
numbers = map(lambda x: int(x) if x.isdigit() else float(x), numbers)
答案 4 :(得分:1)
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]
答案 5 :(得分:0)
如果要显示为相同的列表,请使用以下查询附加列表:
item = input("Enter your Item to the List: ")
shopList.append(int(item) if item.isdigit() else float(item))
当用户输入int值或浮点值时,它会附加列表shopList并将这些值存储在其中。