Python子字符串搜索未按预期工作

Python子字符串搜索未按预期工作,python,Python,我希望代码从另一个列表中查找字符串(IP地址),如果存在匹配项,请执行以下操作: for IP in map(str, container_data): IP=IP.strip() if IP in networkObjectHost: phantom.debug(IP) phantom.debug("is present in") phantom.debug(networkObjectHost) else:

我希望代码从另一个列表中查找字符串(IP地址),如果存在匹配项,请执行以下操作:

for IP in map(str, container_data):
    IP=IP.strip()
    if IP in networkObjectHost:
        phantom.debug(IP)
        phantom.debug("is present in")
        phantom.debug(networkObjectHost)
    else:
        phantom.debug(IP)
        phantom.debug("is NOT present in")
        phantom.debug(networkObjectHost)
当我调试代码时,我可以看到由于IP地址99.88.77.66不匹配,搜索没有按预期工作。我已经尝试了一些方法来解决问题,但我认为我缺少了一些基本的东西

Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): ['6.7.8.9']
Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): is NOT present in
Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): 
[
"network-object host 10.10.2.39",
"network-object host 99.88.77.66",
"network-object host 143.88.17.12",
"network-object host 48.48.56.76"
]
Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): ['99.88.77.66']
Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): is NOT present in
Fri Dec 20 2019 11:17:49 GMT-0500 (Eastern Standard Time): 
[
    "network-object host 10.10.2.39",
    "network-object host 99.88.77.66",
    "network-object host 143.88.17.12",
    "network-object host 48.48.56.76"
执行@Kuro的建议如下,我想我仍然遗漏了一些东西,因为我没有看到“检测到IP匹配”消息

hosts = [elem.split()[-1] for elem in networkObjectHost] 

for IP in map(str, container_data):
    IP=IP.strip()
    phantom.debug("Debugging...") 
    phantom.debug(IP)
    phantom.debug(hosts)
    if IP in hosts:
        phantom.debug("IP Match Detected")
输出:

Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): Debugging...
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): ['6.7.8.9']
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): 
[
    "10.10.2.39",
    "99.88.77.66",
    "143.88.17.12",
    "48.48.56.76"
]
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): Debugging...
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): 
['99.88.77.66']
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): 
[
    "10.10.2.39",
    "99.88.77.66",
    "143.88.17.12",
    "48.48.56.76"
]
Fri Dec 20 2019 12:48:57 GMT-0500 (Eastern Standard Time): No actions were executed
Fri Dec 20 2019 12:48:58 GMT-0500 (Eastern Standard Time): 
尝试在if语句中使用列表中的ip(ip,networkObjectHost)而不是networkObjectHost中的ip:

def ip_in_list(IP, networkObjectHost):
    return any([IP[0] in i for i in networkObjectHost])
当前代码的问题是Python正在检查整个
IP
,作为
networkObjectHost
中的一项

例如:

IP=['99.88.77.66']

networkObjectHost = [
"network-object host 10.10.2.39",
"network-object host 99.88.77.66",
"network-object host 143.88.17.12",
"network-object host 48.48.56.76"
]
networkObjectHost
中没有一项是
['99.88.77.66']
,因此它返回
False

相反,您需要检查
networkObjectHost
中的每个项目,以查看它是否包含
IP
。但是,
IP
是一个包含单个项目的列表,因此要检查实际的IP字符串是否在
networkObjectHost
中,我们必须取第一个项目(索引0)并与之匹配。

我看到的是
IP
是一个列表,
networkObjectHost
是一个字符串列表。您要检查
IP
(即
IP[0]
)的唯一元素是否存在于
networkObjectHost
的任何字符串中。由于ip地址(本例中为
99.88.77.66
)不等于任何字符串,因此检查失败。您需要做的是拆分
networkObjectHost
,并仅从中获取IP地址。像-

hosts = [elem.split()[-1] for elem in networkObjectHost] 
你可以检查一下

if IP[0] in hosts:
   ....
如果您使用的日志框架将字符串显示为列表,那么您不需要IP[0],必须使用IP。我认为是这样的,因为
IP.strip()
返回字符串而不是列表。在这种情况下,
IP[0]
将仅为一个字符(例如,在
6.7.8.9
的情况下,
IP[0]
将仅为
6


请注意,如果您的
IP[0]
1.2.3.4
并且
networkObjectHost
包含类似
networkObjectHost 51.2.3.4
的字符串,则在i中使用
any(IP[0]代替networkObjectHost)
将不起作用。这是因为该字符串中存在
1.2.3.4
,但ip地址不完全相同。

我看不出您的代码或输出有任何错误。它正确地识别出IP不在IP列表中。您的问题是什么?我希望在网络对象主机99.88.77.66上搜索99.88.77.66以匹配。看起来您正在比较包含字符串的列表(查看“IP”的调试打印)使用字符串列表。字符串列表不包含具有IP地址字符串值的列表作为条目,因此找不到它…尝试了此建议,6.7.8.9和99.88.77.66都显示为present@juanald_reagan,我已经更改了我的答案。请查看itI更新,但认为我仍然缺少一些东西,不是吗ear查找匹配-更新的线程。@juanald_reagan,你能检查一下主机[1]的类型和长度吗?这也是你的实际代码吗?还要检查
hosts=[elem.split()