3

我有一个字符串列表

["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"
4

5 回答 5

16

我会lower结合any

>>> 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

不过,同样的规则也成立。如果您要进行多次搜索,最好将列表列表规范化一次。

于 2012-12-10T21:17:25.230 回答
3

您可以使用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', 'potatoes', 'pencils', 'paper']

于 2012-12-10T21:16:49.880 回答
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):
于 2012-12-10T21:16:37.190 回答
1

不是 python 爱好者,通常是编程新手,但是,这是我的解决方案:

我试图与您的一般方法保持一致,但是您可能希望考虑将代码封装在一个函数中。

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

这里有一些关于功能的一般信息: 维基百科

这里是关于函数的 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)

希望这可以帮助

干杯

于 2012-12-10T21:52:00.853 回答
0

lower您可以使用该功能,而不是使用您现在拥有的东西。

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

print "Not found"
于 2012-12-10T21:13:33.717 回答