我得查了很多的世界,如果他們在串...代碼如下所示:如何縮短(Pythonic)?
if "string_1" in var_string or "string_2" in var_string or "string_3" in var_string or "string_n" in var_string:
do_something()
如何使它更具可讀性和更清晰?
我得查了很多的世界,如果他們在串...代碼如下所示:如何縮短(Pythonic)?
if "string_1" in var_string or "string_2" in var_string or "string_3" in var_string or "string_n" in var_string:
do_something()
如何使它更具可讀性和更清晰?
這是一種方式:
words = ['string_1', 'string_2', ...]
if any(word in var_string for word in words):
do_something()
參考:any()
更新:
爲了完整起見,如果要執行只有所有字包含的功能字符串,您可以使用all()
而不是any()
。
另請注意,此構造不會做任何不必要的計算,因爲any
將返回,如果它遇到true
值和generator expression用於創建布爾值。所以你也有一些在計算布爾表達式時通常使用的short-circuit evaluation。
感謝那就是我所需要的... – Pol 2010-08-30 13:46:11
@Pol:那麼你應該把這個標記爲接受,然後。 – 2010-08-30 14:33:15
你看過濾器嗎?
filter(lambda x: x in var_string, ["myString", "nextString"])
然後可以與地圖相結合,得到這個
map(doSomething(), filter(lambda x: x in var_string, ["myString", "nextString"]))
編輯:
當然你想要什麼,不辦。使用any
解決方案。出於某種原因,我認爲你每次都想完成它,而不是一次。
不會爲字符串中的任何單詞執行'doSomething()'嗎? – 2010-08-30 14:05:17
是的。哦,等等,他只想做一次,不是嗎?廢話。感謝您指出了這一點。 – wheaties 2010-08-30 14:28:32
>>> import re
>>> string="word1testword2andword3last"
>>> c=re.compile("word1|word2|word3")
>>> c.search(string)
<_sre.SRE_Match object at 0xb7715d40>
>>> string="blahblah"
>>> c.search(string)
>>>
這似乎不太簡潔,python的pythonic少 – marr75 2010-08-30 13:58:26
Define Pythonic?什麼使Pythonic變成了什麼?上面唯一簡潔的語句是re.compile和re.search。其餘的只是顯示輸出示例。哦,等等,Python解釋器的提示可能會模糊你的Pythonic眼睛... – ghostdog74 2010-08-30 14:15:39
import re
if re.search("string_1|string_2|string_n", var_strings): print True
蟒正則表達式的優點它它返回無論是正則表達式對象(即給出什麼匹配信息)或無,其可以用作在測試一個「假」值。
另一種方式來實現這一 check = lambda a: any(y for y in ['string_%s'%x for x in xrange(0,10)] if y in a)
print check('hello string_1')
正則表達式,(但不記得如何做到這一點在Python) – pastjean 2010-08-30 13:38:51