【发布时间】:2012-09-11 14:38:27
【问题描述】:
我正在寻找一种更有效的方法来总结给定字符串中所有字符的 ASCII 值,仅使用标准 python(最好是 2.7)。
目前我有:
print sum(ord(ch) for ch in text)
我想强调的是,我在上面写的这个问题的主要重点和方面。
以下是这个问题不太重要的方面,应该这样对待:
那我为什么要问它?!我已经将这种方法与嵌入一个简单的 C 代码函数进行了比较,后者使用 PyInline 执行相同的 here,似乎一个简单的 C 嵌入函数快 17 倍。
如果没有比我建议的更快的 Python 方法(仅使用标准 Python),那么 Python 开发人员没有在核心中添加这样的实现似乎很奇怪。
建议答案的当前结果。 在我的 Windows 7、i-7、Python 2.7 上:
text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
sum(ord(ch) for ch in text)
>> 0.00521324663262
sum(array.array("B", text))
>> 0.0010040770317
sum(map(ord, text ))
>> 0.00427160369234
sum(bytearray(text))
>> 0.000864669402933
C-code embedded:
>> 0.000272828426841
【问题讨论】:
-
为什么这样的函数应该成为 Python 核心的一部分?我看不到它的一般用途......
-
@Tim Pietzcker:在对字符串进行哈希处理时经常使用字符串的 ascii 值的总和,例如滚动哈希函数
-
@Michael 只有一个非常差的哈希值才会对这些值进行直接求和,通常会涉及到权重。而且,正如所指出的,最好使用更高级别的接口(如
hash()),然后 that 可以在 C 中。 -
@Michael:我并没有不同意,我只是想问为什么这样的功能足够有用,可以包含在核心语言中。
-
这个问题有两个有争议的主张:一个,它将纯 Python 代码与嵌入式 C 代码进行比较,其中嵌入式 C 代码甚至不处理简单的溢出。因此,这种比较是无用的,并且会偏离问题。其次,在语言中包含这样的求和函数而不给出单个用例的建议是完全愚蠢的。 (由于展开解释的原因,哈希用例不计算在内。)在可预见的未来,对 Python 核心的每一项添加都会带来维护和教学负担,并且需要被可证明的用例覆盖。
标签: python string python-2.7 ascii