Python将列表中的字符串转换为数字

标签 python python-2.7 list csv

我遇到了以下错误信息:

invalid literal for int() with base 10: '"2"'

2 在外面用单引号括起来,在里面用双引号括起来。此数据位于使用 print primes[0]primes 列表中。

primes 列表中的示例数据:

["2","3","5","7"]

primes 列表是通过以下方式从 CSV 文件创建的:

primes=csvfile.read().replace('\n',' ').split(',')

我正在尝试将 primes 列表中的字符串转换为整数。

通过谷歌,我在 SE 上遇到了与我类似的问题,并且我尝试了与我的问题 IMO 相关的两个常见答案。

使用 map ():

primes=map(int,primes)

使用列表理解:

primes=[int(i) for i in primes]

不幸的是,当我使用它们中的任何一个时,它们都会给出与上面列出的相同的错误消息。当使用 long() 而不是 int() 时,我收到类似的错误消息。

请指教。

最佳答案

你想要:

  • 读取每个csv行
  • 使用所有行的扁平化版本创建一个整数列表。

因此您必须处理引号(有时它们甚至可能不在此处,具体取决于文件的创建方式)以及当您用空格替换换行符时,不会将最后一个数字与一行分开下一行的第一个数字。你有很多问题。

改用csv 模块。假设 f 是打开文件的句柄:

import csv

nums = [int(x) for row in csv.reader(f) for x in row]

在一行中解析单元格,去除引号(如果存在)并展平 + 转换为整数。

要限制读取的数字数量,您可以创建一个生成器推导式而不是列表推导式,并且只使用前 n 个项目:

n = 20000 # number of elements to extract
z = (int(x) for row in csv.reader(f) for x in row)
nums = [next(z) for _ in xrange(n)] # xrange => range for python 3

更好的是,为了避免 StopIteration 异常,您可以改用 itertools.islice,因此如果 csv 数据结束,您将获得完整列表:

nums = list(itertools.islice(z,n))

(请注意,您必须倒回文件才能多次调用此代码,否则您将得不到任何元素)

在没有 csv 模块的情况下执行此任务当然是可能的 ([int(x.strip('"')) for x in csvfile.read().replace('\n',',').split(',')]) 但更复杂且容易出错。

关于Python将列表中的字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695440/

相关文章:

python - 如何删除列表或字符串中的连续值

Python查找列表中元素的索引并在另一个列表中删除

python-2.7 - Pandas groupby、pivot 或 stack?将单列的组转换为多列

mysql - EXISTS 语句中忽略的 SELECT 列表和子查询是什么?

python - 如何在另一个类中使用一个类的变量

Python 无法连接到 grpc channel -> "failed to connect to all addresses" "grpc_status":14

c# - 更改列表中的项目 C#

python - fors 在 python 列表理解中

python - 保存许多不同长度的数组

python - global 关键字内联全局是否与 python 中的局部变量声明完全相同?