我在python中有两个列表列表,如下所示:
a = [['1490526293.84', '2010113827', 'amazon.com', '208.67.220.220'],
['1490526293.78', '2010113827', 'amazon.com', '208.67.222.222'],
['1490525901.72', '2010113827', 'amazon.com', '8.8.4.4'],
['1490526293.66', '2010113827', 'amazon.com', '8.8.8.8'],
['1490525291.24', '151249113', 'google.com', '208.67.220.220'],
['1490524291.18', '151249113', 'google.com', '208.67.222.222'],
['1490526289.02', '151249113', 'google.com', '8.8.4.4'],
['1490526288.96', '151249113', 'google.com', '8.8.8.8'],
['1490525291.46', '2017032579', 'intuit.com', '208.67.220.220'],
['1490526291.41', '2017032579', 'intuit.com', '208.67.222.222'],
['1490526291.35', '2017032579', 'intuit.com', '8.8.4.4'],
['1490526291.29', '2017032579', 'intuit.com', '8.8.8.8']]
b = [['1490526293.66', '2010113827', 'amazon.com', '8.8.8.8'],
['1490526288.96', '151249113', 'google.com', '8.8.8.8'],
['1490526291.29', '2017032579', 'intuit.com', '8.8.8.8']]
对于列表中的每个项目:
最初的要求是找到 a 中的每个列表 b 。这很简单,完成如下:
for item in a:
if item not in b:
print item
但是,现在我需要找到 a 中未出现在 b 中的列表,并且特定域的时间差异超过5分钟从 b 的列表中,以便输出如下:
[['1490525901.72', '2010113827', 'amazon.com', '8.8.4.4'],
['1490525291.24', '151249113', 'google.com', '208.67.220.220'],
['1490524291.18', '151249113', 'google.com', '208.67.222.222'],
['1490525291.46', '2017032579', 'intuit.com', '208.67.220.220']]
到目前为止,我所尝试的内容如下:
for item_a in a:
if item_a not in b:
for item_b in b:
if item_a[2] == item_b[2]:
if float(item_b[0]) - float(item_a[0]) > 300:
print item_a
这是疯狂嵌套的,我一直在寻找更好的替代方案
答案 0 :(得分:0)
我有办法解决你的问题,但时间复杂度可能很高。
for item_a in a:
if item_a not in b:
for item_b in b:
if item_a[2]==item_b[2]:
if abs(float(item_a[0])-float(item_b[0]))>5*60:
print item_a
break
如果列表a(item_a)和项目表单列表b(item_b)中的项目具有相同的domain_name且item_a [0]和item_b [0]之间的差异的绝对值大于5 * 60,则打印item_a。
答案 1 :(得分:-1)