[英]Generator in if-statement in python
或者如何在修改后的列表中使用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!"
我可以做得更好吗?
if any(s.lower() == "foo" for s in list): print "found"
列表理解:
mylist = ["Foo", "Bar"]
lowerList = [item.lower() for item in mylist]
那么你可以if "foo" in lowerlist
执行类似if "foo" in lowerlist
或者完全绕过临时变量, if "foo" in [item.lower() for item in mylist]
这结合了生成器表达式的内存优势和删除重复项的速度增益:
if "foo" in (s.lower() for s in set(list)): print "found"
怎么样:
theList = ["Foo", "Bar"]
lowerCaseSet = set(x.lower for x in theList)
if "foo" in lowerCaseSet:
print "found"
BTW。 你不应该调用你的变量list
因为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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.