比较2个期刊列表并提取新的事件

时间:2016-07-11 02:56:03

标签: python

我有定期数据作为唯一id的列表从最近发生的事件开始。

list1的

['001', '003', '005', '002', '004', '006', '008', '007']

x以后我得到:

list2中

['006', '004', '001', '003', '005', '002', '008', '007']

正如您所看到的,在 list2 中,新的事件已经开始,而旧事件则被推向了最后。

我想要做的是提取并将'006''004'附加到 list3 ,从而产生:

项目list3

['006', '004', '001', '003', '005', '002', '004', '006', '008', '007']

我不知道如何做到这一点,任何帮助都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

如果您确定新发生的事件始终位于list2的前两个索引,则您只需切片,然后扩展切片:

list3 =  list2[:2]
list3.extend(list1)
print(list3)
# ['006', '004', '001', '003', '005', '002', '004', '006', '008', '007']

如果您不确定索引,那么您可以使用itertools.takewhilelist2获取所有新发生的内容,然后使用{{1} 扩展 }:

list1

from itertools import takewhile new_occurences = takewhile(lambda x: x!=list1[0], list2) list3 = list(new_occurences) list3.extend(list1) print(list3) # ['006', '004', '001', '003', '005', '002', '004', '006', '008', '007'] takewhile获取项目,直到达到list2中的第一项。

答案 1 :(得分:1)

<强>假设

  1. 列表项目是唯一的
  2. 新项目被推到列表的开头
  3. <强>方法

    将第一个列表的第一个项目首次出现在第二个列表中,并在出现的索引处对第二个列表进行分区。将第二个列表的第一个片段与第一个列表

    组合在一起

    <强>代码

    list1 = ['001', '003', '005', '002', '004', '006', '008', '007']
    
    list2 = ['006', '004', '001', '003', '005', '002', '008', '007']
    
    list2.index(list1[0])
    Out[45]: 2
    
    list2[:list2.index(list1[0])] + list1
    Out[46]: ['006', '004', '001', '003', '005', '002', '004', '006', '008', '007']
    

答案 2 :(得分:0)

我假设新出现的次数可能介于0和n之间,其中n是list2中的元素数。与@Abhijit类似,但不是那么干净或有效。

list1 = ['001', '003', '005', '002', '004', '006', '008', '007']
list2 = ['006', '004', '001', '003', '005', '002', '008', '007']

list3 = list(list2)
for id  in list2:
    if id == list1[0]:
        break
    list3.insert(0, id)


print(list3)