2 回答
TA贡献1808条经验 获得超4个赞
for sublista in a:
if not any(sublista[1:4] == sublistb[1:4] for sublistb in b):
print(sublista)
你需要一个内部循环,使每个子列表,从列表中a可以比较每个子列表列表b。内部循环是通过生成器表达式完成的。切片用于仅比较子列表的一部分。内置函数any消耗生成器表达式;它是惰性的,将True在第一次 True等价比较时返回。这将打印每个子列表中a不具有在比赛b-打印每个子列表中b不具有的一场比赛中a,放b在外循环和a内循环中。
这是不使用生成器表达式或的等效项any:
for sublista in a:
equal = False
for sublistb in b:
if sublista[1:4] == sublistb[1:4]:
break
else:
print(sublista)
有时使用起来很好,operator.itemgetter因此您可以为切片使用名称,这可以使代码更易于理解。:
import operator
good_stuff = operator.itemgetter(1,2,3)
for sublista in a:
if not any(good_stuff(sublista) == good_stuff(sublistb) for sublistb in b):
print(sublista)
itertools.product方便地生成对,可以用作上面嵌套循环的替代品。下面使用字典 ( defaultdict)来保存aand 中每个子列表的比较结果b,然后检查是否有匹配项 - 它同时进行atob和btoa比较。
import itertools, collections
pairs = itertools.product(a, b)
results = collections.defaultdict(list)
for sub_one, sub_two in pairs:
comparison = good_stuff(sub_one) == good_stuff(sub_two)
results[tuple(sub_one)].append(comparison)
results[tuple(sub_two)].append(comparison)
for sublist, comparisons in results.items():
if any(comparisons):
continue
print(sublist)
# or
from pprint import pprint
results = [sublist for sublist, comparisons in results.items() if not any(comparisons)]
pprint(results)
TA贡献1783条经验 获得超4个赞
for v in a,b:
for items in v:
if 'NETFLOW02' in items:
print('\t'.join(items))
我不确定这是否适合您的目的,但您似乎想要捕获NETFLOW02从这两个列表中调用的网络接口的结果。
我确定这可能是不可接受的原因,但您也可以将其扩展为在更长的列表中包含其他关键字,好吧,只要您的问题中解释了嵌套的任何长度的列表。为此,您需要创建另一个列表,假设keywords = ['NETFLOW02','ETH01']
然后我们也简单地迭代这个列表。
results = []
for v in a,b:
for item in v:
for kw in keywords:
if kw in item:
results.append(item)
print('\t'.join(item))
print(results)
添加回答
举报