【问题标题】:How to check if an element of a list contains some substring如何检查列表的元素是否包含某些子字符串
【发布时间】:2019-10-23 19:02:33
【问题描述】:

下面的代码没有按预期工作,看起来像优化在完整列表中搜索而不是单独搜索每个元素并始终返回 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”。

【问题讨论】:

  • 在服装列表上运行代码会打印&lt;&lt; &gt;&gt; 中的第一个单词,然后在abcdefwordlist 上引发`NameError...
  • mylist 看起来像什么? word 已经是字符串了吗?
  • 另外,看起来你对i 没有任何作用,那么外部循环应该做什么?

标签: python string list find


【解决方案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(),因为我要搜索的子字符串肯定是小写的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2011-03-31
    • 2016-08-09
    • 2010-10-04
    • 2018-05-01
    • 2014-05-07
    • 2022-11-14
    相关资源
    最近更新 更多