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
的长度,因此是线性的。