- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有大约 5000 万个像这样的 Python 字符串列表:
["1", "1.0", "", "foobar", "3.0", ...]
我需要将它们变成像这样的 float 和 Nones 列表:
[1.0, 1.0, None, None, 3.0, ...]
目前我使用的代码如下:
def to_float_or_None(x):
try:
return float(x)
except ValueError:
return None
result = []
for record in database:
result.append(map(to_float_or_None, record))
to_float_or_None 函数总共花费了大约 750 秒(根据 cProfile)...有没有更快的方法来执行从字符串列表到 float /Nones 列表的转换?
更新
我已将 to_float_or_None
函数确定为主要瓶颈。我找不到使用 map
和使用列表理解在速度上的显着差异。我使用 Paulo Scardine 的技巧来检查输入,它已经节省了 1/4 的时间。
def to_float_or_None(x):
if not(x and x[0] in "0123456789."):
return None
try:
return float(x)
except:
return None
生成器的使用对我来说是新的,所以感谢 Cpfohl 和 Lattyware 的提示!这确实加快了文件的读取速度,但我希望通过将字符串转换为 float /Nones 来节省一些内存。
最佳答案
到目前为止给出的答案并没有真正完全回答这个问题。 try...catch
与验证 if then
可能导致不同的性能(参见:https://stackoverflow.com/a/5591737/456188)。总结一下这个答案:取决于失败与成功的比率以及两种情况下失败和成功的MEASURED时间。基本上我们无法回答这个问题,但我们可以告诉您如何:
if/then
测试相同的 try/catch
优化它,然后测量两个版本的 to_float_or_None
失败 100 次需要多长时间,并测量两个版本的 to_float_or_None
成功 100 次需要多长时间。关于列表理解问题的旁注:
取决于你是否希望能够索引这个结果,或者你是否只想迭代它,生成器表达式实际上会比列表理解更好(只需将 [
]
字符替换为 (
)
字符)。
它基本上不需要时间来创建,并且 to_float_or_None 的实际执行(这是昂贵的部分)可以延迟到它需要的结果。
出于多种原因,这很有用,但如果您需要对其编制索引,则无法使用。但是,它将允许您使用生成器压缩原始集合,这样您仍然可以访问原始字符串及其 float_or_none 结果。
关于python - 在捕获 ValueErrors 时将许多字符串列表转换为 float 列表的快速 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925734/
我正在尝试并行运行具有循环返回值的函数。但它似乎停留在 results = pool.map(algorithm_file.foo, population) 在 for 循环的第二次迭代中 r
Serving Flask 应用程序“服务器”(延迟加载) 环境:生产警告:这是一个开发服务器。不要在生产部署中使用它。请改用生产 WSGI 服务器。 Debug模式:开启 在 http://0.0.
我使用“product.pricelist”模型中的 get_product_price_rule() 函数。我的代码是: price = self._get_display_price(produ
我收到以下错误: Traceback (most recent call last): File "/home/odroid/trackAndFollow/getPositions.py", line
我正在尝试采用机器学习方法,但遇到了一些问题。这是我的代码: import sys import scipy import numpy import matplotlib import pandas
我尝试使用 tensorflow 1.4.0 对我的原始记录进行分类。过程如下。 拳头:读取图片和标签,输出“tfrecord”格式的文件。第二:读取tf记录和训练 编写tfrecord脚本是 !/u
我是新手,所以需要任何帮助,当我要求一个例子时,我的教授给我了这段代码,我希望有一个工作模型...... from numpy import loadtxt import numpy as np fr
我无法弄清楚为什么会出现此 ValueError...为了提供一些上下文,我正在使用 requests、BeautifulSoup 和 json 与 python 来抓取站点 json 数据。 我不确
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我在尝试在 Keras 2.0.8、Python 3.6.1 和 Tensorflow 后端中训练模型时遇到问题。 错误消息: ValueError: Error when checking targ
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我有这段代码: while True: try: start = int(input("Starting number: ")) fin = int(i
我是 python 的初学者编码员,试图制作一个“模具滚筒”,您可以在其中选择模具的大小,它在我的代码的第 20 行返回此错误 import sys import random import geto
我有以下代码: import fxcmpy import pandas as pd from pandas import datetime from pandas import DataFrame a
我正在尝试使用 django 和 python 制作一个博客应用程序。我也在尝试使用 s3 存储桶进行存储,使用 heroku 进行部署。我正在学习 coreymschafer 的在线教程。我正在按照
我创建了一个 numpy 数组(考虑输入数据)并想更改顺序(一些数值运算后的输出数据)。在使用转换后的数组时,我遇到错误并找到了根本原因。请在下面找到详细信息并使用 numpy 版本 1.19.1 i
我已经引用了之前的查询 All arguments should have the same length plotly但仍然没有得到我的问题的答案。 我有一个黄金价格数据集。 Date
我是一名优秀的程序员,十分优秀!