关于python:将字符串列表转换为int或float

Convert a list of strings to either int or float

我有一个列表,看起来像这样:

1
['1', '2', '3.4', '5.6', '7.8']

如何将前两个改为int,最后三个改为float

我希望我的列表如下所示:

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]

使用isdigit是最好的,因为它可以处理所有的边缘情况(史蒂文在评论中提到)

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]


为什么不使用ast.literal_eval

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并将这些值存储在其中。