【问题标题】:Find words in lists using python by entering part of them通过输入部分单词,使用 python 在列表中查找单词
【发布时间】:2014-09-11 05:51:58
【问题描述】:

给定列表:

my_list = ['barrow', 'yellow', 'green', 'red', 'mellow']

我想在该列表中找到匹配 '****ow' 的单词('*' 是任何字母)。这应该返回 'barrow'、'yellow' 和 'mellow'(包含在列表中的单词,由六个字母组成,最后两个字母是 'ow')

【问题讨论】:

  • 我将在几秒钟内发布答案,但作为旁注,您应该避免使用 list 作为变量名,因为它已经是 Python 中的一种类型
  • 这不是代码编写服务;你尝试过什么,它到底有什么问题?
  • 我知道。我一直在研究,我不知道如何面对它。
  • 那么你到底“研究”了什么?!到目前为止,您认为使用 Python 解析文本的各种方法中的哪一种不合适?你有没有想过搜索例如“python 匹配词”,它会带你去here

标签: python list find


【解决方案1】:

解决问题的另一种方法是使用fnmatch,前提是您的干草堆是字符串列表。如果不是,您可能需要预先转换为字符串

>>> import fnmatch
>>> my_list = [2345, 3245, 2343, 8746]
>>> fnmatch.filter(map(str, my_list), "2*4*")
['2345', '2343']
>>> my_list = ['barrow', 'yellow', 'green', 'red', 'mellow']
>>> fnmatch.filter(map(str, my_list), "*ow")
['barrow', 'yellow', 'mellow']

【讨论】:

    【解决方案2】:

    试试这个:

    >>> new_list = [w for w in my_list if (len(w) == 6 and w[-2:] == 'ow')]
    >>> new_list
    ['barrow', 'yellow', 'mellow']
    

    【讨论】:

      【解决方案3】:

      [x for x in my_list if x.endswith('ow') and len(x) == 6]

      这使用了一个列表推导式,它采用my_list 中所有以“ow”结尾且长度为 6 的元素,这正是您想要的。对于更通用的解决方案,您将构建一个匹配您想要的字符串的正则表达式 re,并使用 re.match() 作为条件

      【讨论】:

      • 这适用于我发布的示例。在这种情况下它也可以工作吗?:my_list = [2345, 3245, 2343, 8746]。我想在 my_list 中找到 [2*4*] (2345, 2343) 的数字
      【解决方案4】:

      您可以使用正则表达式:

      >>> import re
      >>> my_list = ['barrow', 'yellow', 'green', 'red', 'mellow']
      >>> [e for e in my_list if re.search(r'....ow', e)]
      ['barrow', 'yellow', 'mellow']
      >>> [e for e in my_list if re.search(r'2\d4\d', str(e))]
      [2345, 2343]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多