【问题标题】:Converting list to string then integer将列表转换为字符串然后整数
【发布时间】:2018-07-20 02:14:02
【问题描述】:

我有一个包含 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: '['

我做错了什么?我是编码新手...

【问题讨论】:

  • 删除str(trip_list)。它将列表转换为字符串。

标签: python string list integer


【解决方案1】:

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

【讨论】:

  • 非常感谢您的解释。现在我确切地知道我做错了什么并且理解了 map 函数背后的逻辑!
  • 没关系,帮助别人很有趣!
【解决方案2】:

您必须将每个元素转换为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)

【讨论】:

  • 谢谢!这有效:mean_tripstr = map(str,trip_list) mean_trip = list(map(int,mean_tripstr))
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2021-06-18
相关资源
最近更新 更多