不区分大小写的'in'-Python

我喜欢使用表达


if 'MICHAEL89' in USERNAMES:

    ...

USERNAMES清单在哪里


有什么方法可以区分大小写不敏感的项目,还是需要使用自定义方法?只是想知道是否需要为此编写额外的代码。


谢谢大家!


www说
浏览 1550回答 3
3回答

SMILET

if 'MICHAEL89' in (name.upper() for name in USERNAMES):    ...或者:if 'MICHAEL89' in map(str.upper, USERNAMES):    ...或者,可以的,您可以定制方法。

慕盖茨4494581

我会做一个包装纸,这样您就可以做到无创。至少,例如:class CaseInsensitively(object):    def __init__(self, s):        self.__s = s.lower()    def __hash__(self):        return hash(self.__s)    def __eq__(self, other):        # ensure proper comparison between instances of this class        try:           other = other.__s        except (TypeError, AttributeError):          try:             other = other.lower()          except:             pass        return self.__s == other现在,if CaseInsensitively('MICHAEL89') in whatever:应按要求运行(无论右侧是列表,字典还是集合)。(可能需要付出更多的努力才能获得相似的字符串包含结果,在某些情况下避免发出警告,包括unicode等等)。

Smart猫小萌

通常(至少在oop中),您可以使对象成形为所需的行为。name in USERNAMES不区分大小写,因此USERNAMES需要更改:class NameList(object):    def __init__(self, names):        self.names = names    def __contains__(self, name): # implements `in`        return name.lower() in (n.lower() for n in self.names)    def add(self, name):        self.names.append(name)# now this worksusernames = NameList(USERNAMES)print someone in usernames这样做的好处在于,它无需进行任何类外的代码更改,便可以进行许多改进。例如,您可以将更self.names改为一组以进行更快的查找,或者(n.lower() for n in self.names)仅计算一次并将其存储在类中,依此类推...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python