代码之家  ›  专栏  ›  技术社区  ›  Philippe Lavoie

python中if语句中的生成器

  •  5
  • Philippe Lavoie  · 技术社区  · 14 年前

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

    我已经读了一段时间了(谢谢大家)。我喜欢。我还看到,你可以张贴一个问题,并回答自己。抱歉,如果我复制,但我没有找到这个具体的答案在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 回复  |  直到 14 年前
        1
  •  8
  •   Wai Yip Tung    14 年前
    if any(s.lower() == "foo" for s in list): print "found"
    
        2
  •  1
  •   Jason Scheirer    14 年前

    列表理解:

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

    然后你可以做一些像 if "foo" in lowerlist 或者完全忽略临时变量 if "foo" in [item.lower() for item in mylist]

        3
  •  0
  •   Piotr Czapla    14 年前

    怎么样:

    theList = ["Foo", "Bar"]
    lowerCaseSet = set(x.lower for x in theList)
    
    if "foo" in lowerCaseSet:
       print "found"
    

    list 因为这个词已经被 列表 类型。

        4
  •  0
  •   Tony Veijalainen    14 年前

    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'
    
        5
  •  0
  •   Tim McNamara    14 年前

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

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