Python-比较两个匹配项的列表,其中项包含不等于?

Python-比较两个匹配项的列表,其中项包含不等于?,python,Python,是否可以在两个列表中搜索匹配项,其中列表项包含匹配字符串,但不相等 例如: list_a = [ 'ip prefix-list PL_ABBA seq 5 permit 10.10.10.0/24', 'ip prefix-list PL_ABBA seq 10 permit 10.20.10.0/24', ] list_b = [ '10.10.10.0/24', '10.20.10.0/24', '10.30.10.0/24', '

是否可以在两个列表中搜索匹配项,其中列表项包含匹配字符串,但不相等

例如:

list_a = [
    'ip prefix-list PL_ABBA seq 5 permit 10.10.10.0/24',
    'ip prefix-list PL_ABBA seq 10 permit 10.20.10.0/24',
    ]

list_b = [
    '10.10.10.0/24',
    '10.20.10.0/24',
    '10.30.10.0/24',
    '10.40.10.0/24',
    ]
列表a中缺少
10.30.10.0/24
10.40.10.0/24
,因此我想将这两个作为缺少返回

我可以将列表a中的子网正则化,生成新的列表a,然后使用set进行比较?但我想知道是否有更简单的方法

谢谢

您可以使用

>>> IPs = {s.rsplit(' ')[-1] for s in list_a}
>>> IPs
>>> {'10.10.10.0/24', '10.20.10.0/24'}
>>> [ip for ip in list_b if ip not in IPs]
>>> ['10.30.10.0/24', '10.40.10.0/24']
IPs
是ip地址的
集合
(用于O(1)成员资格测试),其中
s.rsplit(“”)[-1]
用于获取
列表中元素的ip部分

您可以使用

>>> IPs = {s.rsplit(' ')[-1] for s in list_a}
>>> IPs
>>> {'10.10.10.0/24', '10.20.10.0/24'}
>>> [ip for ip in list_b if ip not in IPs]
>>> ['10.30.10.0/24', '10.40.10.0/24']
IPs
是ip地址的
集合
(用于O(1)成员资格测试),其中
s.rsplit(“”)[-1]
用于获取
列表中元素的ip部分

试试下面的例子

result = []

for item in list_b:
    for st in list_a:
        if item in st:
            break
    else:
        result.append(item)
print(result)
输出:

['10.30.10.0/24', '10.40.10.0/24']
试试下面的例子

result = []

for item in list_b:
    for st in list_a:
        if item in st:
            break
    else:
        result.append(item)
print(result)
输出:

['10.30.10.0/24', '10.40.10.0/24']

已在
过滤器中回答(lambda x:x不在[x.split(“”)[-1]中,对于列表a中的x,列表b)
已在
过滤器中回答(lambda x:x不在[x.split(“”)[-1]中,对于列表a中的x,列表b)
谢谢,可以了,如果列表a中有可能的项目,这将如何影响性能?@AlexW我们只需在
list_a
上迭代一次,即可分离IP。在此之后,
IPs
中的所有
检查都是O(1)。换句话说,这个代码的复杂度为O(n+m),其中n是
list\u a
的长度,
m
list\u b
的长度,因此是线性的。谢谢,这是可行的,如果list\u a中有可能的项目,这将如何影响性能?@AlexW我们只需在
list\u a
上迭代一次就可以分离IP。在此之后,
IPs
中的所有
检查都是O(1)。换句话说,该代码的复杂性为O(n+m),其中n是
list_a
的长度,
m
list_b
的长度,因此是线性的。