Python:检查值是否在列表中,忽略大小写
我想检查一个值是否在一个列表里,不管字母的大小写是什么样的,而且我需要这样做得快一点。
这是我现在的代码:
if val in list:
但是我希望它能忽略字母的大小写。
5 个回答
2
如果你手头只有一堆值,最简单的方法就是像下面这样做:
if val.lower() in [x.lower() for x in list]: ...
不过,实际上维护一个像 set
或 dict
这样的结构会更好,里面的键是列表中值的小写版本。这样的话,你就不用每次都去遍历(可能很长的)整个列表了。
顺便提一下,把 list
用作变量名是不太好的做法,因为 list
也是 Python 内置类型的名字。这样一来,你可能会试图调用 list
这个内置函数(它的作用是把东西变成列表),结果却因为你的 list
变量不能被调用而感到困惑。或者,反过来,你在某个地方使用你的 list
变量时,它恰好超出了作用范围,这样你又会因为无法访问内置的 list
而感到困惑。
4
如果你知道你的所有值都是字符串类型(str
)或者Unicode类型(unicode
),你可以试试这个:
if val in map(str.lower, list):
...Or:
if val in map(unicode.lower, list):
16
check = "asdf"
checkLower = check.lower()
print any(checkLower == val.lower() for val in ["qwert", "AsDf"])
# prints true
使用 any() 函数。这种方法很好,因为你不需要重新创建一个小写字母的列表,它只是遍历这个列表,一旦找到一个为真的值,就会停止遍历并返回结果。