gpt4 book ai didi

python - 检查字符串是否包含列表项

转载 作者:行者123 更新时间:2023-11-28 21:51:53 25 4
gpt4 key购买 nike

我有以下脚本来检查字符串是否包含列表项:

word = ['one',
'two',
'three']
string = 'my favorite number is two'
if any(word_item in string.split() for word_item in word):
print 'string contains a word from the word list: %s' % (word_item)

这行得通,但我正在尝试打印字符串包含的列表项。我做错了什么?

最佳答案

问题是您使用的是 if 语句而不是 for 语句,因此您的 print 仅运行(最多)一次(如果至少有一个单词匹配),此时 any 已经运行了整个循环。

这是做你想做的最简单的方法:

words = ['one',
'two',
'three']
string = 'my favorite number is two'
for word in words:
if word in string.split():
print('string contains a word from the word list: %s' % (word))

如果出于某种原因你想让它发挥作用,你可以这样做:

for word in filter(string.split().__contains__, words):
print('string contains a word from the word list: %s' % (word))

由于有人一定会回答与性能相关的答案,即使这个问题与性能无关,所以将字符串拆分一次并根据您要检查的单词数进行转换会更有效set 也可能有用。


关于您在评论中的问题,如果您想要多词“单词”,有两个简单的选择:添加空格然后在完整字符串中搜索单词,或者使用带有单词边界的正则表达式。

最简单的方法是在要搜索的文本前后加一个空格符,然后搜索' ' + word + ' ':

phrases = ['one',
'two',
'two words']
text = "this has two words in it"

for phrase in phrases:
if " %s " % phrase in text:
print("text '%s' contains phrase '%s'" % (text, phrase))

对于正则表达式,只需使用\b字边界:

import re

for phrase in phrases:
if re.search(r"\b%s\b" % re.escape(phrase), text):
print("text '%s' contains phrase '%s'" % (text, phrase))

很难说哪个“更好”,但正则表达式的效率可能要低得多(如果这对您很重要的话)。


如果你不关心单词边界,你可以这样做:

phrases = ['one',
'two',
'two words']
text = "the word 'tone' will be matched, but so will 'two words'"

for phrase in phrases:
if phrase in text:
print("text '%s' contains phrase '%s'" % (text, phrase))

关于python - 检查字符串是否包含列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com