下面的代码无法正常工作,并且看起来像在优化以在完整列表中进行搜索,而不是分别搜索每个元素,并且始终返回true。
目标代码是仅在每次迭代中搜索列表中每个元素的子字符串,然后返回true或false。但这实际上是在寻找完整列表。
在下面的代码中,如果我使用find()或in运算符,则打印语句将在<<>>
内部打印完整列表,但如果使用==运算符,则仅打印一个单词。
问题代码:
def myfunc(mylist):
for i in range(len(mylist)):
count = 0
for word in mylist:
print('<<{}>>'.format(word))
if str(word).casefold().find('abc') or 'def' in str(word).casefold():
count += 1
abcdefwordlist.append(str(word))
break
此代码在由单词组成的mylist中搜索“ abc”或“ def”。
如果我使用str(word).casefold() == 'abc' or str(word).casefold() == 'def'
,则它仅与单词比较。
在这样的循环中,如何检查包含“ abc”或“ def”的单词。
答案 0 :(得分:1)
您在这里遇到几个问题。
abcdefwordlist
未定义(至少在您显示给我们的代码中没有定义)。abcdefwordlist
。 您对'def' in str(word)
有正确的想法,但必须在两个子字符串中都使用它。综上所述,一个可以完成您想要的功能的函数看起来像这样:
def myfunc(mylist):
abcdefwordlist = [] # unless it already exists elsewhere
for word in mylist:
if 'abc' in str(word).lower() or 'def' in str(word).lower():
abcdefwordlist.append(word)
return abcdefwordlist
也可以使用列表理解将其分类为单行代码:
def myfunc(mylist):
return [word for word in mylist if 'abc' in str(word).lower() or 'def' in str(word).lower()]
顺便说一句,我使用lower()
而不是casefold()
是因为我要搜索的子字符串绝对是小写