假设我有一个看起来像这样的字符串:
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上遇到过的最好,最有帮助的答案之一.感谢你.
我使用的东西比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.
我需要使用从另一个表中删除的值来更新表.情况是评论投票记分员类似于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.
我正在使用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秒.
我的主要问题是:
def sleep(dt):
sleep(calibration_function(dt))
顺便说一句,我读到睡眠甚至不能很长时间等待:Python time.sleep()的上限? 我也在某处读到了制作一个更短时间间隔的循环来提高精度,但是当我想延迟0.01秒时,这是没用的.Karl Voigtland提到使用ctypes的nanosleep,但我觉得这有点过分,而且time.sleep应该做它的预期行为.
time.sleep是一个破碎的python功能?或者没有人关心准确的时间测量吗?
我正在按照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) 我无法重新分配功能.我想分配一个先前定义的函数,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(),以便它接收两个字符串并将代码分配给给定的函数名?
python ×5
performance ×3
eval ×1
gstreamer ×1
javascript ×1
lvalue ×1
matplotlib ×1
plot ×1
plugins ×1
postgresql ×1
probability ×1
python-3.4 ×1
regex ×1
replace ×1
sleep ×1
sql-delete ×1
sql-update ×1
string ×1
syntax ×1
wait ×1