gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:12 25 4
gpt4 key购买 nike

我遇到了以下错误信息:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com