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

时间:2018-11-01 16:57:13

标签: 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',
    '10.40.10.0/24',
    ]

10.30.10.0/2410.40.10.0/24从list_a中丢失了,所以我想把这两个作为丢失者返回吗?

我可以将list_a的子网进行正则表达式制作为new_list_a,然后使用set进行比较?但想知道是否有更简单的方法?

谢谢

2 个答案:

答案 0 :(得分:5)

您可以使用

>>> 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地址的set(用于O(1)成员资格测试),其中s.rsplit(' ')[-1]用于获取{{1 }}。

答案 1 :(得分:0)

请尝试以下示例。

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']