在python中使用if语句生成器

时间:2010-08-05 21:56:10

标签: python list if-statement generator list-comprehension

或如何在修改后的列表中使用if语句。

我一直在阅读StackOverflow一段时间(感谢所有人)。我喜欢它。我也看到你可以发一个问题并自己回答。很抱歉,如果我复制,但我没有在StackOverflow上找到这个特定的答案。


  • 如何验证元素是否在列表中但在同一时间进行修改?

我的问题:

myList = ["Foo", "Bar"]
if "foo" in myList:
  print "found!"

由于我不知道列表中元素的情况,我想与小写列表进行比较。明显但丑陋的答案是:

myList = ["Foo", "Bar"]
lowerList = []

for item in myList:
  lowerList.append(item.lower())

if "foo" in lowerList:
  print "found!"

我可以做得更好吗?

5 个答案:

答案 0 :(得分:8)

if any(s.lower() == "foo" for s in list): print "found"

答案 1 :(得分:1)

列表理解:

mylist = ["Foo", "Bar"]
lowerList = [item.lower() for item in mylist]

然后您可以执行if "foo" in lowerlist之类的操作或完全绕过临时变量if "foo" in [item.lower() for item in mylist]

答案 2 :(得分:1)

这结合了生成器表达式的内存优势和删除重复项的速度增益:

if "foo" in (s.lower() for s in set(list)): print "found"

答案 3 :(得分:0)

怎么样:

theList = ["Foo", "Bar"]
lowerCaseSet = set(x.lower for x in theList)

if "foo" in lowerCaseSet:
   print "found"

顺便说一句。您不应该调用变量list,因为list类型已经使用了此词。

答案 4 :(得分:0)

请不要使用list作为变量名,这里是将生成器放入变量并演示的版本,找到答案后生成停止并且没有耗尽生成器:

list_to_search = ["Foo", "Bar"]
lowergen = (item.lower() for item in list_to_search)
if "foo" in lowergen:
  print "found!"
print next(lowergen), 'is next after it'