我有一个包含 unicode 符号(西里尔文)的字符串:
myString1 = 'Австрия'
myString2 = 'AustriЯ'
我想检查字符串中的所有元素是否都是英文(ASCII)。现在我正在使用一个循环:
for char in myString1:
if ord(s) not in range(65,91):
break
因此,如果我找到第一个非英语元素,我就会打破循环。但是对于给定的示例,您可以看到字符串可以在末尾包含很多英文符号和 unicode。这样我将检查整个字符串。此外,如果所有字符串都是英文的,我仍然会检查每个字符。
有没有更有效的方法来做到这一点? 我在想类似的事情:
if any(myString[:]) is not in range(65,91)
原文由 Mikhail_Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
set
(O(1)
包含检查)来加快检查速度,尤其是在检查相同范围内的多个字符串时,因为初始集创建也需要一次迭代。然后,您可以将all
用于比any
更适合的早期迭代模式:当然,任何
all
构造都可以通过 DeMorgan 定律 转换为any
:更新:
正如 Artyer 所指出的,一种基于纯集的方法不需要完整的迭代: