Python:检查值是否在列表中,忽略大小写

11 投票
5 回答
29980 浏览
提问于 2025-04-16 14:05

我想检查一个值是否在一个列表里,不管字母的大小写是什么样的,而且我需要这样做得快一点。

这是我现在的代码:

if val in list:

但是我希望它能忽略字母的大小写。

5 个回答

2

如果你手头只有一堆值,最简单的方法就是像下面这样做:

if val.lower() in [x.lower() for x in list]: ...

不过,实际上维护一个像 setdict 这样的结构会更好,里面的键是列表中值的小写版本。这样的话,你就不用每次都去遍历(可能很长的)整个列表了。

顺便提一下,把 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() 函数。这种方法很好,因为你不需要重新创建一个小写字母的列表,它只是遍历这个列表,一旦找到一个为真的值,就会停止遍历并返回结果。

示例:http://codepad.org/dH5DSGLP

撰写回答