不区分大小写的用于python的IN

时间:2015-02-21 00:44:10

标签: python

有没有办法在python中执行类似SQL的IN语句。例如:

'hello' in ['Hello', 'Goodbye'] # case insensitive
True

我正在考虑重建列表的列表理解,但希望有更简单的东西。

2 个答案:

答案 0 :(得分:5)

您可以map列表str.lower

if 'hello' in map(str.lower, ['Hello', 'Goodbye']):

在Python 3.x中,由于map返回迭代器,因此不会构建新列表。在Python 2.x中,您可以通过导入itertools.imap来实现相同的目标。


或者,您可以使用generator expression

if 'hello' in (x.lower() for x in ['Hello', 'Goodbye']):

这也是懒惰的,在两个版本中都是一样的。

答案 1 :(得分:3)

使用any的生成器表达式将是更有效的方法之一,如果找到匹配项,它将懒惰地评估短路:

l =['Hello', 'Goodbye'] 
s = "hello"
if any(s == x.lower() for x in l):
    ....

In [10]: l =['Hello', 'Goodbye']   
In [11]: s = "hello"    
In [12]: any(s == x.lower() for x in l)
Out[12]: True