我有一个包含unicode符号(西里尔文)的字符串:
myString1 = 'Австрия'
myString2 = 'AustriЯ'
我想检查字符串中的所有元素是否都是英语(ASCII)。 现在我使用一个循环:
^{pr2}$所以如果我找到第一个非英语元素,我就会打破这个循环。但是对于给定的示例,您可以看到字符串的末尾可以包含许多英文符号和unicode。这样我就可以检查整根弦了。此外,如果所有的字符串都是英文的,我仍然会检查每个字符。在
有没有更有效的方法?我在想的是:
if any(myString[:]) is not in range(65,91)
另一种方法,正如@schwobaseggl建议的那样,但使用全套方法:
您可以通过使用} 作为早期中断的迭代模式,它比^{} 更适合这里:
set
(O(1)
包含检查)来加快检查速度,特别是如果您要检查同一范围的多个字符串,因为初始集创建也需要一次迭代。然后您可以使用^{当然,任何
^{pr2}$all
结构都可以通过DeMorgan's Law转换为any
:更新:
正如Artyer所指出的,一个好的基于纯集的方法不需要完全迭代:
re
似乎很快:OP的两个例子和一个积极的例子的基准(set是@schwobaseggl setset是@DanielSanchez):
^{pr2}$基准代码:
相关问题 更多 >
编程相关推荐