我試圖通過python摸索,並學習最好的方式來做事情。我有一個字符串,其中我做可以用一個字符串比較,看看是否有匹配:比較字符串與數組中的所有值
if paid[j].find(d)>=0:
#BLAH BLAH
如果「d」是一個數組,什麼是看是否支付包含在字符串中的最有效的方法[j]與'd'中的任何值匹配?
我試圖通過python摸索,並學習最好的方式來做事情。我有一個字符串,其中我做可以用一個字符串比較,看看是否有匹配:比較字符串與數組中的所有值
if paid[j].find(d)>=0:
#BLAH BLAH
如果「d」是一個數組,什麼是看是否支付包含在字符串中的最有效的方法[j]與'd'中的任何值匹配?
如果你只是想知道,如果的d
任何項目包含在paid[j]
,因爲你從字面上說:
if any(x in paid[j] for x in d): ...
如果你也想要知道其中項的d
包含在paid[j]
:
contained = [x for x in d if x in paid[j]]
contained
將是,如果沒有的d
項目都包含在paid[j]
空列表。
還有其他的解決方案,但如果你想要的是另一種選擇,例如,獲得包含在paid[j]
的d
的第一項目(和None
如果項目不被這樣包含):
firstone = next((x for x in d if x in paid[j]), None)
BTW ,因爲在評論中你提到了句子和單詞,也許你不一定需要字符串檢查(這就是我所有的例子所做的),因爲它們不能考慮單詞邊界 - 例如,每個例子都會說'cat'是in
'obfuscate'(因爲'混淆'包含'cat'作爲子字符串)。爲了允許對單詞邊界進行檢查,而不是簡單的子字符串檢查,您可能會高效地使用正則表達式......但是我建議您打開一個單獨的問題,如果這是您需要的 - 此答案中的所有代碼片斷取決於根據您的具體要求,如果您將謂詞x in paid[j]
更改爲更復雜的謂詞(如somere.search(paid[j])
),則適用於適當的RE對象somere
將同樣有效。 (Python 2.6或更高版本 - 2.5和更早版本中的細微差異)。
如果你的目的是另外一回事,比如讓一個或所有指數在項目d
滿足您的約束的,因此對於這些不同的問題,太容易的解決辦法......但是,如果你實際上要求離你說的很遠,我最好不要猜測,並希望你澄清;-)。
這是一個很好的解釋,謝謝。我的目標是解析所有這些HTML代碼尋找鏈接。一旦我列出了他們的名單,我會通過該名單並將其與主名單'd'進行比較。我想比較字符串匹配的原因是我可能在解析的html中找到鏈接到domain.com,但它不匹配'd'中的任何內容,但我希望它匹配www.domain.com 。 從你的解釋,這將完成我想要的,對吧? 如果有的話(x在付費[j]爲x在d):... – Nathan 2010-05-06 20:56:52
@哈利克,是的,只要你還想找到(例如)notreallywww.domain.com和www.domain.com .fooledya.org'。如果你不想要這樣的虛假匹配,你需要一個比純字符串匹配更復雜的方法。但是,如果有的話... ...部分仍然是正確的,只是帶有不同的謂詞(儘管如此,更好地打開一個單獨的問題) – 2010-05-06 22:23:31
謝謝!剛剛打開關於此主題的新問題 – Nathan 2010-05-07 01:57:24
我假設你的意思是list
而不是array
? Python中有這樣一個數組,但更多的時候是想要一個列表而不是一個數組。
的方式來檢查,如果列表中包含的值是使用in
:
if paid[j] in d:
# ...
在Python中你可以使用in
操作。你可以做這樣的東西:
>>> "c" in "abc"
True
採取這種進一步的,你可以檢查複雜的結構,像元組:
>>> (2, 4, 8) in ((1, 2, 3), (2, 4, 8))
True
for word in d:
if d in paid[j]:
do_something()
會嘗試所有詞語的列表d
和檢查他們可以在字符串paid[j]
中找到。
這不是非常有效,因爲paid[j]
必須再次掃描d
中的每個單詞。你也可以使用兩組,一組由句子中的單詞組成,你的列表中的一個,然後看看這些組的交集。
sentence = "words don't come easy"
d = ["come", "together", "easy", "does", "it"]
s1 = set(sentence.split())
s2 = set(d)
print (s1.intersection(s2))
輸出:
{'come', 'easy'}
你能解釋一下'd''中任何值的匹配是什麼意思嗎?你認爲什麼是「匹配」?你需要的字符串是相同的嗎? – 2010-05-06 20:04:32
感謝您的回覆。是的,我是指名單。對不起,還在學習。我的意思是看付費[j](一個句子)和列表'd'中的任何單詞之間是否存在模式匹配。 – Nathan 2010-05-06 20:15:18