Python 2.7:在列表中查找忽略大小写的项目

时间:2012-12-10 21:09:24

标签: python python-2.7

我有一个字符串列表

["oranges", "POTATOES", "Pencils", "PAper"]

我想查找列表是否包含paper,忽略大小写;以便以下代码段应打印found。我的列表只包含由英文字母组成的简单字符串 - 大写和小写。

item = 'paper'
stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
if item in stuff:
    print "found"
else:
   print "Not found"

#How do I get the method to print "found"?

澄清:

我的列表实际上是列表列表,我的逻辑使用以下构造:

if not any ( item in x for x in stuff):
   print "Not found"
else:
   print "found"

5 个答案:

答案 0 :(得分:13)

我将lowerany合并:

>>> stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
>>> any(s.lower() == 'paper' for s in stuff)
True
>>> any(s.lower() == 'paperclip' for s in stuff)
False

一旦发现一个(与listcomp不同),它将短路并停止搜索。 OTOH,如果您要进行多次搜索,那么您也可以使用listcomp来降低整个列表的次数。

对于你的更新案例(为什么没有人问他们感兴趣的问题,而是另一个问题呢?),我可能会做类似的事情

>>> any("book" in (s.lower() for s in x) for x in stuff)
True
>>> any("paper" in (s.lower() for s in x) for x in stuff)
True
>>> any("stuff" in (s.lower() for s in x) for x in stuff)
False

同样的规则也适用。如果您正在进行多次搜索,那么您可能最好将列表列表规范化一次。

答案 1 :(得分:2)

您可以使用List Comprehension将列表转换为小写。

if item in [x.lower() for x in stuff]:
    print "found"
else:
    print "not found"
  
    
      
        

stuff = [“oranges”,“POTATOES”,“Pencils”,“PAper”]         print [x.lower()for x in stuff]
        ['oranges','potato','pencil','paper']

      
    
  

答案 2 :(得分:1)

将两个字符串转换为大写字母或小写字母并进行比较?

item = 'paper'
stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
if item.upper() in map(lambda x: x.upper(), stuff):
    print "found"
else:
    print "Not found"

额外: 然后使用这一行

if not any ( item.upper() in map(lambda y: y.upper(), x) for x in stuff):

答案 3 :(得分:1)

不是python buff,而且通常是编程的新手,但是,这是我的解决方案:

我试图接近你的一般方法,但是你可能想要考虑在函数中封装代码。

我不知道你的经验水平,所以请原谅我发布你已经熟悉的东西

这里有一些关于功能的一般信息: wikipedia

这里有关于函数的Pythons文档: Python Documentation

第一个解决方案,冗长但对于新手来说更容易理解:

def item_finder_a(item, stuff):
    new_array = []
    for w in stuff:
        new_array.append(w.lower())
    if item in new_array:
        print "found"
    else:
       print "Not found"

item_finder(word,array_of_words)

稍微简短一点的版本

def item_finder_b(item, stuff):
    if item in map(str.lower,stuff):
        print "found"
    else:
       print "Not found"

item_finder_b(word,array_of_words)

希望这有帮助

干杯

答案 4 :(得分:0)

您可以使用lower功能,而不是使用现有功能。

for strings in stuff:
  if strings.lower() == item:
    print "found"

print "Not found"