有没有办法在python中执行类似SQL的IN
语句。例如:
'hello' in ['Hello', 'Goodbye'] # case insensitive
True
我正在考虑重建列表的列表理解,但希望有更简单的东西。
答案 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