是否有可能在两个列表中搜索匹配项,其中列表项包含匹配的字符串,不相等?
例如:
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/24
和10.40.10.0/24
从list_a中丢失了,所以我想把这两个作为丢失者返回吗?
我可以将list_a的子网进行正则表达式制作为new_list_a,然后使用set进行比较?但想知道是否有更简单的方法?
谢谢
答案 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']