如何检查列表的元素是否包含一些子字符串

时间:2019-10-23 19:02:33

标签: python string list find

下面的代码无法正常工作,并且看起来像在优化以在完整列表中进行搜索,而不是分别搜索每个元素,并且始终返回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”的单词。

1 个答案:

答案 0 :(得分:1)

您在这里遇到几个问题。

  1. abcdefwordlist未定义(至少在您显示给我们的代码中没有定义)。
  2. 您要遍历列表的长度,然后遍历单词本身的列表,这意味着将太多元素添加到结果数组中。
  3. 该函数不会返回任何内容,除非您只是打算从其外部更新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()是因为我要搜索的子字符串绝对是小写