簡體   English   中英

在python中使用if語句生成器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM