我是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
列表中也有匹配。< / p>
如果发现这样的匹配?我希望它停止搜索更多匹配!
我试过了:
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。
答案 0 :(得分:2)
您可以在此处使用set
会员资格检查+ next
。
>>> a = {'This', 'containing', 'many'}
>>> next((v for v in string1.split() if v in a), 'Nothing Found!')
'This'
这应该给你(可能更好)O(N)性能,因为我们使用next
来查找第一个值,并且设置成员资格测试是恒定时间。
答案 1 :(得分:1)
我认为这可以在不分割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")
答案 2 :(得分:1)
您可以在此处使用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")
答案 3 :(得分:0)
有两种方法可以解决这个问题。一个是使用
string.find(&#39;子&#39)
将返回&#39; substring&#39;的第一个出现的索引的方法在string1中,或者如果没有出现&#39; substring&#39;,则可能返回-1。在string1中。通过遍历搜索项列表a,您将拥有一组标记,每个标记对应于列表中的一个单词。列表中最小的非negative_one值将是您的第一个单词的索引。这非常复杂,但不需要在实际字符串上进行任何循环。
另一种选择是使用
string1.split(&#39;&#39;)
创建字符串中所有单词的列表。然后,您可以通过for循环查看此列表,并检查string1列表中的每个项目是否与任何其他项目相对应。这将是一个很好的学习机会,可以自己尝试,但如果我太模糊或者代码会更有帮助,请告诉我。
希望这有帮助!
答案 4 :(得分:0)
a = ['This', 'containing', 'many']
string1 = "kappa pride pogchamp containing this string this many words"
Break是更好的选择,但是那个解决方案已经存在,所以我想表明你也可以用切片来做:
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]))
答案 5 :(得分:-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
这样做。