2个python列表中的公共列表

时间:2017-03-26 12:25:49

标签: python list

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

对于列表中的每个项目:

  • 第0项是epoch_time
  • 第1项是serial_number
  • 第2项是domain_name
  • 第3项是DNS_server

最初的要求是找到 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

这是疯狂嵌套的,我一直在寻找更好的替代方案

2 个答案:

答案 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)

出于某种原因,我不能只评论,所以我会在这里写。

由于您的子列表是唯一的,因此您可以尝试使用其中一个集合运算符。

https://stackoverflow.com/a/27439300