不区分大小写的匹配python

Boo*_*d16 0 python regex string case-sensitive

我想匹配另一个列表中的项目,而不必担心区分大小写.

mylist1 = ['fbH_q1ba8', 'fHh_Q1ba9', 'fbh_q1bA10','hoot']
mylist2 = ['FBH_q1ba8', 'trick','FBH_q1ba9', 'FBH_q1ba10','maj','joe','civic']
Run Code Online (Sandbox Code Playgroud)

我以前这样做过:

for item in mylist2:
    if item in mylist1:
        print "true"
    else:
        print "false"
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为它不区分大小写.

我知道re.match("TeSt","Test",re.IGNORECASE)但我怎么能将它应用到我的例子中呢?

Mar*_*ers 5

将案例规范化为str.lower():

for item in mylist2:
    print item.lower() in mylist1
Run Code Online (Sandbox Code Playgroud)

in遏制经营者已经返回True或者False,最简单的办法,以打印:

>>> mylist1 = ['fbh_q1ba8', 'fhh_q1ba9', 'fbh_q1ba10','hoot']
>>> mylist2 = ['FBH_q1ba8', 'trick','FBH_q1ba9', 'FBH_q1ba10','maj','joe','civic']
>>> for item in mylist2:
...     print item.lower() in mylist1
... 
True
False
False
True
False
False
False
Run Code Online (Sandbox Code Playgroud)

如果mylist1包含混合大小写值,则需要使循环显式化; 使用生成器表达式生成小写值; 针对此进行测试可确保只有少数元素根据需要进行小写才能找到匹配项:

for item in mylist2:
    print item.lower() in (element.lower() for element in mylist1)
Run Code Online (Sandbox Code Playgroud)

演示

>>> mylist1 = ['fbH_q1ba8', 'fHh_Q1ba9', 'fbh_q1bA10','hoot']
>>> for item in mylist2:
...     print item.lower() in (element.lower() for element in mylist1)
... 
True
False
False
True
False
False
False
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用any():

for item in mylist2:
    print any(item.lower() == element.lower() for element in mylist1)
Run Code Online (Sandbox Code Playgroud)

any()还有短路; 一旦True找到值(找到匹配元素),就会提前停止生成器表达式迭代.这必须小写item每次迭代,因此效率稍低.

另一个演示:

>>> for item in mylist2:
...     print any(item.lower() == element.lower() for element in mylist1)
... 
True
False
False
True
False
False
False
Run Code Online (Sandbox Code Playgroud)