簡體   English   中英

找到以下內容:列表中存儲的任何一個子串(以先到者為准); 在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 ,有一個匹配的子字符串列表aThis

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

這樣做。

欲了解更多信息。 https://docs.python.org/2/library/string.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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