【问题标题】:Find a specific item from a list using python使用python从列表中查找特定项目
【发布时间】:2018-09-28 06:39:56
【问题描述】:

我有一个包含 20000 个产品及其描述的列表 This shows the variety of the products

我希望能够编写一个搜索特定单词的代码,例如“TAPA” 并给出所有 TAPA 的输出

我找到了这个 Find a specific word from a list in python ,但它使用了 startswith ,例如只找到第一项:

 new = [x for x in df1['A'] if x.startswith('00320')]

 ## output ['00320671-01 Guide rail 25N/1660', '00320165S02 - Miniature rolling table']

我该如何找到第二个字母、第三个或任何其他项目

P.S- 列表由字符串、整数、浮点数组成

【问题讨论】:

  • 试试[x for x in df1['A'] if '00320' in x]
  • 感谢 Akshay 成功了

标签: python-3.x list search


【解决方案1】:

您可以为此目的使用string.find(substring)。因此,在您的情况下,这应该可行:

new = [x for x in df1['A'] if x.find('00320') != -1] 

find() 方法返回找到的子字符串的最低索引,否则返回 -1。

要了解更多关于find()的用法,请参阅Geeksforgeeks.com - Python String | find()

编辑 1: 正如 @Thierry 在 cmets 中所建议的那样,一种更简洁的方法是:

new = [x for x in df1['A'] if '00320' in x]

【讨论】:

  • if x.find('00320') != -1 可以更简单有效地写成if '00320' in x:
  • 确实如此。更新了答案。谢谢。
  • 非常感谢你们。有没有办法找到类似的项目?就像每个看起来像“00320047S01”或“00201179S01”的项目??
  • @AdarshBhansali 如果您有固定模式,请尝试正则表达式
  • 有一个模式,但我不知道如何使用正则表达式
【解决方案2】:

find partial string matchesgenerate lists可以使用Pandas的内置函数:

new = df1['A'][df1['A'].astype(str).str.contains('00320')]['A'].tolist()

pandas str.contains() 的一个优点是可以使用正则表达式。

【讨论】:

  • 非常感谢。有没有办法找到类似的项目?就像每个看起来像“00320047S01”或“00201179S01”的项目??
  • 欢迎。类似项目是一个经典的正则表达式案例 - 如果您还没有使用过正则表达式,请查看!您可以使用 ...str.contains(r'00[0-9]{6}S01',regex=True)... 找到 '00320047S01' 或 '00201179S01'... - 换句话说:找到任何具有 ' 00' 后跟 6 个数字([0-9] = 仅匹配数字,{6} = 正好六次)后跟 'S01'。在这里阅读介绍:stackoverflow.com/questions/4736/learning-regular-expressions
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多