[英]Find last occurrence of any item of one list in another list in python
[英]Find the occurrence of: any one of the substrings (whichever first) stored in a list; in a bigger string in Python
我是Python的新手。 我已經通過了其他答案。我可以肯定地說這可能不是重復的。
基本上; 讓我們說例如,我想找到一個子串的出現(存儲在列表中); 如果找到了? 我希望它停止搜索列表的其他子串!
為了更清楚地說明;
a = ['This', 'containing', 'many']
string1 = "This is a string containing many words"
如果你問自己,更大的字符串string1
中的第一個單詞與列表中的單詞匹配a
什么? 答案是This
的,因為在大串的第一個字string1
,有一個匹配的子字符串列表a
是This
a = ['This', 'containing', 'many']
string1 = "kappa pride pogchamp containing this string this many words"
現在,我已經改變了一下string1
。 如果你問自己,更大的字符串string1
中的第一個單詞與列表中的單詞匹配a
什么? 答案是containing
,因為這個詞containing
的是,出現在大串的第一個字string1
還具有在子列表中匹配a
。
如果找到這樣的匹配? 我希望它停止搜索更多匹配!
我試過這個:
string1 = "This is a string containing many words"
a = ['This', 'containing', 'many']
if any(x in string1 for x in a):
print(a)
else:
print("Nothing found")
上面的代碼打印了整個子串列表。 換句話說,它檢查列表a
是否存在任何和所有子串,如果找到則; 它打印整個子串列表。
我也試過查找String find()方法,但我似乎無法理解如何在我的情況下使用它
我在找; 完全說出來: 大字符串中的第一個WORD匹配子字符串中的任何單詞列表並打印該單詞。
要么
找到WHICHEVER SUBSTRING(存儲在SUBSTRINGS列表中)首先出現在BIGGER STRING中並打印特定的SUBSTRING。
你可以使用set
成員資格檢查+ next
在這里。
>>> a = {'This', 'containing', 'many'}
>>> next((v for v in string1.split() if v in a), 'Nothing Found!')
'This'
這應該給你(可能更好)O(N)性能,因為我們使用next
來找到第一個值,並且設置成員資格測試是恆定時間。
我認為這可以通過匹配列表的元素而不拆分string1
來完成。 對於第一場比賽,使用break
來停止執行。
string1 = "This is a string containing many words"
a = ['This', 'containing', 'many']
for x in a:
if x in string1:
print(x)
break
else:
print("Nothing found")
列表理解
l=[x for x in a if x in string1]
if l:
print(l[0])
else:
print("Nothing found")
你可以在這里使用re
。
import re
a = ['This', 'containing', 'many']
string1 = "kappa pride pogchamp containing this string this many words"
print re.search(r"\b(?:"+"|".join(a)+r")\b", string1).group()
輸出:
containing
s="""
a = ['This', 'containing', 'many']
a=set(a)
string1 = 'is a string containing many words This '
c=next((v for v in string1.split() if v in a), 'Nothing Found!')
"""
s1="""
a = ['This', 'containing', 'many']
string1 = "is a string containing many words This "
re.search(r"\b(?:"+"|".join(a)+r")\b", string1)
"""
print timeit.timeit(stmt=s,number=1000000)
print timeit.timeit(stmt=s1,number=1000000, setup="import re")
有兩種方法可以解決這個問題。 一個是使用
string.find( '子串')
將返回string1中第一次出現'substring'的索引的方法,或者如果string1中沒有出現'substring',則可能返回-1。 通過遍歷搜索項列表a,您將擁有一組標記,每個標記對應於列表中的一個單詞。 列表中最小的非negative_one值將是您的第一個單詞的索引。 這非常復雜,但不需要在實際字符串上進行任何循環。
另一種選擇是使用
string1.split('')
創建字符串中所有單詞的列表。 然后,您可以通過for循環查看此列表,並檢查string1列表中的每個項目是否與任何其他項目相對應。 這將是一個很好的學習機會,可以自己嘗試,但如果我太模糊或代碼會更有幫助,請告訴我。
希望這可以幫助!
a = ['This', 'containing', 'many']
string1 = "kappa pride pogchamp containing this string this many words"
休息是更好的選擇,但該解決方案已經存在,所以我想表明你也可以用切片做:
print("".join([item for item in string1.split() if item in a][:1]))
以上列表理解與以下相同:
new=[]
for item in string1.split():
if item in a:
new.append(item)
print("".join(new[:1]))
a = ['This', 'containing', 'many']
string1 = "kappa pride pogchamp containing this string this many words"
newList = string1.split(" ");
for i in newList:
if i in a:
print(i);
break
這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.