我想检查一个值是否在列表中,无论字母是什么情况,我都需要有效地进行。
这就是我所拥有的:
if val in list:
但我希望它忽略案例
答案 0 :(得分:16)
check = "asdf"
checkLower = check.lower()
print any(checkLower == val.lower() for val in ["qwert", "AsDf"])
# prints true
使用any()功能。这个方法很好,因为你没有重新创建小写的列表,它正在遍历列表,所以一旦找到一个真值,它就会停止迭代并返回。
答案 1 :(得分:4)
如果您知道自己的值都是str
或unicode
类型,则可以尝试以下操作:
if val in map(str.lower, list):
...Or:
if val in map(unicode.lower, list):
答案 2 :(得分:2)
如果您真的只有一个值列表,那么您可以做的最好就是
if val.lower() in [x.lower() for x in list]: ...
但最好维护一个set
或dict
,其键是列表中值的小写版本;这样你就不需要继续(可能)遍历整个列表了。
顺便说一句,使用list
作为变量名称的风格很差,因为list
也是Python内置类型之一的名称。您可能会发现自己试图调用list
内置函数(将事物转换为列表)并因为list
变量无法调用而感到困惑。或者,相反,尝试在恰好超出范围的地方使用list
变量,并因为无法索引list
内置而感到困惑。
答案 3 :(得分:0)
您可以降低值并检查它们:
>>> val
'CaSe'
>>> l
['caSe', 'bar']
>>> val in l
False
>>> val.lower() in (i.lower() for i in l)
True
答案 4 :(得分:0)
items = ['asdf', 'Asdf', 'asdF', 'asjdflk', 'asjdklflf']
itemset = set(i.lower() for i in items)
val = 'ASDF'
if val.lower() in itemset: # O(1)
print('wherever you go, there you are')