我想在一个调用中根据标题拆分字符串。我正在寻找一个使用列表理解的简单语法,但我还没有:
s = "123456"
结果是:
^{pr2}$我不想要的是:
re.split('(?i)([0-9a-f]{2})', s)
s[0:2], s[2:4], s[4:6]
[s[i*2:i*2+2] for i in len(s) / 2]
编辑:
好的,我想解析一个十六进制的RGB[a]颜色(以及可能的其他颜色/组件格式),以提取所有组件。 似乎最快的方法是最后一个来自sven marnach的方法:
sven-marnach X范围:每个回路0.883 usec
python -m timeit -s 's="aabbcc";' '[int(s[i:i+2], 16) / 255. for i in xrange(0, len(s), 2)]'
线对/iter:1.38 usec/loop
python -m timeit -s 's="aabbcc"' '["%c%c" % pair for pair in zip(* 2 * [iter(s)])]'
正则表达式:每个循环2.55 usec
python -m timeit -s 'import re; s="aabbcc"; c=re.compile("(?i)([0-9a-f]{2})");
split=re.split' '[int(x, 16) / 255. for x in split(c, s) if x != ""]'
通读这些注释,我们发现真正的问题是:解析十六进制
RRGGBBAA
格式的颜色定义字符串的最快方法是什么。以下是一些选项:正如我所料,第一个版本是最快的:
^{pr2}$请参见:How does zip(*[iter(s)]*n) work in Python?以了解对相同
str
语法的奇怪“2-iter
”的解释。在你在评论中说你想“拥有最快的执行速度”,我不能向你保证这个实现,但是你可以使用^{} 来测量的执行。当然记得what Donald Knuth said about premature optimisation。对于手头的问题(现在你已经揭示了它),我想你会发现{}很难克服。在
^{pr2}$比较
Numpy比单个查找的首选解决方案差:
但是如果你一次做几个转换,numpy要快得多:
^{pr2}$在我的电脑上,Numpy对于大于2的批处理程序更快。您可以通过将
a.shape
设置为(number_of_colors, 4)
来轻松地对值进行分组,尽管这会使tolist
方法慢50%。在实际上,大部分时间都花在将数组转换为列表上。根据您希望如何处理结果,您可以跳过这一步,并获得一些好处:
相关问题 更多 >
编程相关推荐