Skip to main content
 首页 » 编程设计

Python 在列表中查找字符串

2025年05月04日23Terrylee

我有一个 salt 模块,它返回以下输出(我将所有这些存储到一个列表中以使迭代更容易):

    - 2015-05-21 19:25:08,060 [main] WARN  [::::::] c.p.core.FilteringPropertyPlaceholderConfigurer - Could not load properties from class path resource [proferi-component-test.properties]: class path resource [proferi-component-test.properties] cannot be opened because it does not exist 
    - 2015-05-21 19:25:08,064 [main] WARN  [::::::] c.p.core.FilteringPropertyPlaceholderConfigurer - Could not load properties from class path resource [qe-prop-not-specified]: class path resource [qe-prop-not-specified] cannot be opened because it does not exist 
    - 2015-05-21 19:25:13,290 [main] INFO  [::::::] c.p.a.m.persistence.modular.ModelSessionManager - Setup SessionManager modelSessionFactory 
    - 2015-05-21 19:25:14,327 [main] INFO  [::::::] c.p.a.model.persistence.BlueprintsGraphReadSession - Loading model graph for application M-00000304-0000-0001-0000-000000000000 with version MV-0000000000002714-0000000000002695-true 
    - 2015-05-21 19:25:14,658 [main] INFO  [::::::] c.p.a.m.p.hydration.AppModelGraphHydrator - AppModelGraph Hydration stats for app M-00000304-0000-0001-0000-000000000000 - total time:322ms | sql time:20ms | jackson mapping:32ms | vertex adding:6ms | core building:63ms | core population:15ms | proxying:84ms | invocation handler creation:80ms | interface list building:10ms | moving through result set:4ms | items processed:156 
    - 2015-05-21 19:25:14,860 [main] INFO  [-:sales02:Session:SetPasswd:-:-:-] c.l.n.cluster.zookeeper.ZooKeeperClusterClient - Starting ClusterClient... 
    - 2015-05-21 19:25:14,914 [main] INFO  [-:sales02:Session:SetPasswd:-:-:-] c.l.n.cluster.zookeeper.ZooKeeperClusterClient - Cluster started 
    - 2015-05-21 19:25:14,915 [main] INFO  [-:sales02:Session:SetPasswd:-:-:-] com.proferi.core.NorbertProtobufServiceClient - Constructing NettyNetworkClient with close channel time -1 ms, max cnxns per node 10, stale request timeout 20 minutes, stale request purge frequency 2 minutes 
    - 2015-05-21 19:25:14,961 [Thread-8] INFO  [-:sales02:Session:SetPasswd:-:-:-] c.l.n.c.zookeeper.ZooKeeperClusterManagerComponent - Connected to ZooKeeper 
    - 2015-05-21 19:25:14,987 [Thread-8] INFO  [-:sales02:Session:SetPasswd:-:-:-] c.l.n.c.zookeeper.ZooKeeperClusterManagerComponent - Handling a Connected message 
    - 2015-05-21 19:25:15,245 [main] INFO  [-:sales02:Session:SetPasswd:-:-:-] com.company.platform.cli.SetPassword - Password for email address john@tech.com for tenant sales02 was set 
    - 2015-05-21 19:25:15,254 [main] INFO  [-:-:-:-:-:-:-] c.l.norbert.network.netty.NettyNetworkClient - Shutting down NetworkClient 
    - 2015-05-21 19:25:15,273 [main] INFO  [-:-:-:-:-:-:-] c.l.norbert.network.netty.NettyNetworkClient - NetworkClient shut down 
    - 2015-05-21 19:25:15,281 [main] INFO  [-:-:-:-:-:-:-] c.l.n.cluster.zookeeper.ZooKeeperClusterClient - Cluster shut down 

从这个返回我想检查 block 是否有字符串

- 2015-05-21 19:05:18,108 [main] INFO  [-:sales02:Session:SetPasswd:-:-:-] com.company.platform.cli.SetPassword - Password for email address john@tech.com for tenant sales02 was set 

执行此操作的最佳方法是什么?

我尝试使用 for 循环 -

for i in l: 
    if s == i: # where s is the string above 
        return True 
    else: 
        return False 

但是这个方法起作用了(返回了 False )。我尝试使用正则表达式,但字符串太复杂,我无法想出正则表达式公式。任何帮助将不胜感激。

因为这是一个列表,我知道我可以使用索引来获取所需的字符串,但我不想要该字符串,我想在那里检查它,然后将自定义字符串返回给用户。

请您参考如下方法:

一个更简单的方法是使用类似的东西:

if s in l: 
    return True 

不需要像这样带有简单检查的 for 循环,它会遍历列表并在匹配时返回正数(或任何你想返回的)。这也是一种在 python 脚本中为 CLI 级菜单构建稳健性的方法。

提示:您可能希望将要检查的字符串列表更改为一个集合。运行速度稍快。

编辑:更好的方法:

return s in l 

如果你执意要使用 for 循环 -

for i in l: 
   if any(i == s for i in entry) 
        return True 

虽然这可能是一个不太优雅的解决方案,但使用 any() 确实可以让您拥有比上面的简单理解更柔和的匹配 - 然而,这是有风险的,因为如果您有一个字符串在至少包含您的匹配条件字符串以及更多信息的列表中,它也将返回 true。