我有一个包含1550500个数字的列表,所有数字都带有引号。 示例:list('100','150','200','250')等... 我需要对所有数字求和,但是在此之前,我需要将其转换为INT。
列表名称:trip_list
我的代码:
mean_tripstr = str(trip_list)
mean_trip = [int(x) for x in mean_tripstr]
print(type(mean_trip))
错误消息:
Traceback (most recent call last):
File "projeto1.py", line 235, in <module>
mean_trip = [int(x) for x in mean_tripstr]
File "projeto1.py", line 235, in <listcomp>
mean_trip = [int(x) for x in mean_tripstr]
ValueError: invalid literal for int() with base 10: '['
我在做什么错?我是编码新手...
答案 0 :(得分:0)
您必须将每个元素转换为int
:
mean_tripstr = map(str,trip_list)
mean_trip = list(map(int,mean_tripstr))
上面的代码使用generator
,在只需要迭代列表的情况下,效率更高。最后一行再次正确地转换为列表。
但是,正如您所说的,如果您已经有一个字符串列表,则可以执行以下操作:
mean_trip = list(map(int,trip_list))
如果您知道numpy
,也可以这样做:
import numpy as np
trip_list = np.array(trip_list)
mean_trip = trip_list.astype(np.int)
答案 1 :(得分:0)
Python有一个map函数,它需要一个函数并且是可迭代的。还有一个sum函数,它返回一个可迭代对象的总和。
您可以使用此:
sum(map(int(trip_list))
请注意,map函数不返回列表,而是返回一个生成器。要将其转换为列表,请使用
list(sum(map(int, trip_list)))
(这可能需要一段时间,因为它需要遍历整个列表,而您的列表很长)。
代码错误将列表转换为字符串,即
>>> my_list = ["5", "6"]
>>> my_list_str = str(my_list)
>>> my_list_str
"['5', '6']"
>>> type(my_list_str)
<class 'str'>
>>> type(my_list)
<class 'list'>
因此,当您尝试遍历字符串时,第一个x
是[
,它不是数字(因此是例外)。
作为旁注,使用list(map(int, a_list))
比[int(i) for i in a_list]
>>> c1 = "list(map(int, a_list))"
>>> c2 = "[int(i) for i in a_list]"
>>> s = "a_list = [str(i) for i in range(1000)]"
>>> import timeit
>>> timeit.timeit(c1, setup=s, number=10000)
1.9165708439999918
>>> >>> timeit.timeit(c2, setup=s, number=10000)
2.470973639999997