加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 检查字符串的任何(所有)字符是否在给定范围内

发布时间:2020-12-20 12:13:43 所属栏目:Python 来源:网络整理
导读:我有一个包含unicode符号(cyrillic)的字符串: myString1 = 'Австрия'myString2 = 'AustriЯ' 我想检查字符串中的所有元素是否都是英文(ASCII). 现在我正在使用循环: for char in myString1: if ord(s) not in range(65,91): break 因此,如果我找到
我有一个包含unicode符号(cyrillic)的字符串:

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 string

ascii = 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读