将list中的str数转换为int,求出lis的和

2024-09-30 01:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,但是其中的数字是字符串,所以我找不到列表的和,所以我需要帮助将列表中的数字转换为int

这是我的密码

def convertStr(cals):
    ret = float(cals)
return ret
TotalCal = sum(cals)

所以基本上有一个叫做cals的列表 看起来像这样

 (20,45,...etc)

但是里面的数字是字符串,所以当我试着这样求和的时候

TotalCal = sum(cals)

然后运行它会显示一个错误,说明列表需要是int格式 所以问题是如何将list格式的所有数字转换成int格式?你知道吗

如果你有一个不同的方式来寻找名单的总和,这将是很好的。你知道吗


Tags: 字符串密码列表returndef格式etc数字
2条回答

您可以使用python内置的^{}或列表理解来实现这一点

def convertStr(cals):
    ret = [float(i) for i in (cals)]
    return ret

或者

def convertStr(cals):
    return map(float,cals)

以下是两种方法的timeit结果

$ python -m timeit "cals = ['1','2','3','4'];[float(i) for i in (cals)]"
1000000 loops, best of 3: 0.804 usec per loop
$ python -m timeit "cals = ['1','2','3','4'];map(float,cals)"
1000000 loops, best of 3: 0.787 usec per loop

如您所见map比列表理解更快、更具python风格。这是全文讨论的here

map may be microscopically faster in some cases (when you're NOT making a lambda for the purpose, but using the same function in map and a listcomp). List comprehensions may be faster in other cases


另一种使用^{}的方法。对于长列表,这是最快的

from itertools import imap
TotalCal = sum(imap(float,cals)

并使用timeit表示包含1000个条目的列表。你知道吗

$ python -m timeit "import random;cals = [str(random.randint(0,100)) for r in range(1000)];sum(map(float,cals))"
1000 loops, best of 3: 1.38 msec per loop
$ python -m timeit "import random;cals = [str(random.randint(0,100)) for r in range(1000)];[float(i) for i in (cals)]"
1000 loops, best of 3: 1.39 msec per loop
$ python -m timeit "from itertools import imap;import random;cals = [str(random.randint(0,100)) for r in range(1000)];imap(float,cals)"
1000 loops, best of 3: 1.24 msec per loop

正如下面的Padraic mentionsimap方式是最好的方式!它很快 1 而且看起来很棒!包含库函数只与小列表有关,而与大列表无关。因此,对于大型列表,imap更适合。你知道吗

列表理解仍然比map慢1微秒!!!感谢上帝

sum(map(float,cals))

或者

sum(float(i) for i in cals)

相关问题 更多 >

    热门问题