小编JDo*_*ong的帖子

在python中替换大量字符串?

假设我有一个看起来像这样的字符串:

str = "The &yquick &cbrown &bfox &Yjumps over the &ulazy dog"
Run Code Online (Sandbox Code Playgroud)

您会注意到字符串中有很多位置,其中有一个&符号,后跟一个字符(例如"&y"和"&c").我需要用字典中的适当值替换这些字符,如下所示:

dict = {"&y":"\033[0;30m",
        "&c":"\033[0;31m",
        "&b":"\033[0;32m",
        "&Y":"\033[0;33m",
        "&u":"\033[0;34m"}
Run Code Online (Sandbox Code Playgroud)

最快的方法是什么?我可以手动找到所有的&符号,然后循环通过字典来改变它们,但这似乎很慢.做一堆正则表达式替换似乎也很慢(我的实际代码中将有一个大约30-40对的字典).

任何建议表示赞赏,谢谢.

编辑:

正如在这个问题的评论中所指出的,我的字典是在运行时之前定义的,并且在应用程序生命周期的过程中永远不会改变.它是ANSI转义序列的列表,其中将包含大约40个项目.我要比较的平均字符串长度大约为500个字符,但最多可达5000个字符(但这些字符很少见).我目前也在使用Python 2.6.

编辑#2 我接受Tor Valamos的回答是正确的,因为它不仅提供了有效的解决方案(虽然它不是最好的解决方案),而是考虑了所有其他解决方案并做了大量的工作来比较所有这些.这个答案是我在StackOverflow上遇到过的最好,最有帮助的答案之一.感谢你.

python regex string performance replace

42
推荐指数
4
解决办法
2万
查看次数

Python matplotlib开罗错误

我使用的东西比pyplot教程网站上的示例代码更简单:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5])
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到错误:

TypeError: Couldn't find foreign struct converter for 'cairo.Context'

我使用的是Python 3.4.2,并且从pip开始全新安装matplotlib,cairocfft> 0.6,numpy> = 1.6.

我尝试卸载cairocfft并python-cairo从Arch存储库中获取,但现在我有错误:

NotImplementedError: Surface.create_for_data: Not Implemented yet.

有没有办法在不安装许多库的情况下绘制基本线图?我并不热衷于安装pyqt4,正如这篇博文建议的那样.这个github问题建议安装gi-cairo,但gi-cairo不在Arch存储库上,也不能在PyPI上找到它(我自己的搜索失败了?)

我记得在Python2上这是一件轻而易举的事,但现在已经迁移到了Python3.

python plot matplotlib python-3.4

19
推荐指数
2
解决办法
1万
查看次数

在Postgres中使用DELETE的返回值进行UPDATE

我需要使用从另一个表中删除的值来更新表.情况是评论投票记分员类似于SO上的评分投票记分员.我正在使用python来处理postgres,但这不应该有所作为.

query="""
UPDATE comment SET score=score-(DELETE FROM history
                                WHERE commentId=%(commentId)s AND
                                      userIdentity=%(userIdentity)s RETURNING vote)
WHERE commentId=%(commentId)s;
"""
cursor.execute(query, data)
Run Code Online (Sandbox Code Playgroud)

出现错误(DELETE FROM; 出现语法错误.我可以用DELETE声明替换SELECT声明,它会起作用,这里有什么我想念的吗?我想在更新中使用返回值.这可能吗?一切都有帮助.

相关模式:

CREATE TABLE history (
    commentId bigint,
    vote int,
    userIdentity varchar(256),
);
CREATE TABLE comment (
    id bigint,
    score bigint,
);
Run Code Online (Sandbox Code Playgroud)

history.vote通常是1-1.

postgresql syntax sql-update sql-delete

11
推荐指数
1
解决办法
7529
查看次数

Python time.sleep vs忙等待准确性

我正在使用python标准库中的time.sleep函数,发现它不适合亚毫秒延迟.从测试中我发现实际等待1到1毫秒等待1.1-1.2毫秒.实现忙碌等待使准确度达到1%以内.我用了:

def busy_wait(dt):   
    current_time = time.time()
    while (time.time() < current_time+dt):
        pass
Run Code Online (Sandbox Code Playgroud)

并且可以在降低1%准确度之前下降到0.0001秒.

我的主要问题是:

  • 为什么睡眠功能如此不准确(可能是C问题)?获得更好的CPU和更高的时钟速度会改变这个吗?
  • 为什么有人会睡觉?我看到的唯一优势是节能,仅限于嵌入式系统,不是吗?
  • 通过校准补偿睡眠的不准确性是否可行?像这样:
def sleep(dt):
    sleep(calibration_function(dt))

顺便说一句,我读到睡眠甚至不能很长时间等待:Python time.sleep()的上限? 我也在某处读到了制作一个更短时间间隔的循环来提高精度,但是当我想延迟0.01秒时,这是没用的.Karl Voigtland提到使用ctypes的nanosleep,但我觉得这有点过分,而且time.sleep应该做它的预期行为.

time.sleep是一个破碎的python功能?或者没有人关心准确的时间测量吗?

python performance sleep wait

9
推荐指数
1
解决办法
1万
查看次数

无法加载 python gstreamer 元素

我正在按照https://mathieuduponchelle.github.io/2018-02-01-Python-Elements.html?gi-language=undefined上的指南在 Python 中创建示例 gstreamer 元素。但是,我无法让 GStreamer 加载它。我一直在摆弄,GST_PLUGIN_PATH但找不到我的 python 文件。我可以让 GStreamer 找到已编译的 .so 元素,但 python 元素似乎逃避了插件加载器。

我已经安装gstreamer1.0,pygobject,并尽我最大的能力,GST-蟒蛇到Debian的9.8 Linux fe34e822e54e 4.18.0-17-generic #18~18.04.1-Ubuntu SMP Fri Mar 15 15:27:12 UTC 2019 x86_64

apt install gstreamer1.0-tools
apt install python3-gst-1.0 python-gst-1.0  # install python bindings for gstreamer
apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0  # Install PyGObject as per https://pygobject.readthedocs.io/en/latest/getting_started.html#ubuntu-getting-started
Run Code Online (Sandbox Code Playgroud)

我扎根于/tmp/my_gtest

$ ls
python
$ ls python/
srcelement.py
$ GST_PLUGIN_PATH=$GST_PLUGIN_PATH:$PWD gst-inspect-1.0 audiotestsrc_py
No such element or plugin 'audiotestsrc_py'
$ GST_PLUGIN_PATH=$GST_PLUGIN_PATH:$PWD GST_DEBUG=4 …
Run Code Online (Sandbox Code Playgroud)

python plugins gstreamer

5
推荐指数
2
解决办法
1587
查看次数

如何使用自定义概率分布选择随机选择

我在美国人口普查网站上列出了美国名字及其各自的名字.我想使用给定的概率从此列表中生成一个随机名称.数据在这里:美国人口普查数据

我已经看到了像轮盘赌选择算法这样易于实现的算法,但我想知道是否有任何方法可以在O(1)中生成随机名称.对于直方图数据,这更容易,因为您可以创建生日的整数哈希,但我想这样做以进行连续分发.

如果这是不可能的,是否有任何python模块接受概率分布并根据这些分布生成随机值?

python performance probability

3
推荐指数
1
解决办法
874
查看次数

使用eval的Javascript函数赋值

我无法重新分配功能.我想分配一个先前定义的函数,drawScene一个不同的方法.

function fSwap(funcName, code) {
    eval(funcName) = eval(code);
}
fSwap("drawScene", "function drawScene() { /* Do something */ }");
Run Code Online (Sandbox Code Playgroud)

我觉得这应该工作,但由于某种原因eval(funcName)不是左值,它返回错误ReferenceError: invalid assignment left-hand side.更令人费解的是:

var a = function test() {return 0;};
alert(a === eval("a"));
eval("a") = function test() {return 1;};
Run Code Online (Sandbox Code Playgroud)

提供警报,true但不允许我分配给该功能a.

我唯一的猜测是,出于安全原因,eval()不返回左值.如果是这样,我如何实现fSwap(),以便它接收两个字符串并将代码分配给给定的函数名?

javascript eval lvalue

1
推荐指数
1
解决办法
1124
查看次数