
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)解决方法 您可以使用集合(O(1)包含检查)加快检查速度,特别是如果要检查相同范围的多个字符串,因为初始集创建也需要一次迭代.然后,您可以使用
all作为早期的迭代模式,这种模式比 any更合适: import stringascii = set(string.ascii_uppercase)ascii_all = set(string.ascii_uppercase + string.ascii_lowercase)if all(x in ascii for x in my_string1): # my_string1 is all ascii
当然,任何所有构造都可以转换为任何通道DeMorgan’s Law:
if not any(x not in ascii for x in my_string1): # my_string1 is all ascii
更新:
一个很好的基于纯集的方法,不需要完整的迭代,如Artyer所指出:
if ascii.issuperset(my_string1): # my_string1 is all ascii总结
以上是内存溢出为你收集整理的python – 检查字符串的任何(所有)字符是否在给定范围内全部内容,希望文章能够帮你解决python – 检查字符串的任何(所有)字符是否在给定范围内所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)