我有定期数据作为唯一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']
我不知道如何做到这一点,任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
如果您确定新发生的事件始终位于list2
的前两个索引,则您只需切片,然后扩展切片:
list3 = list2[:2]
list3.extend(list1)
print(list3)
# ['006', '004', '001', '003', '005', '002', '004', '006', '008', '007']
如果您不确定索引,那么您可以使用itertools.takewhile
从list2
获取所有新发生的内容,然后使用{{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)
<强>假设强>
<强>方法强>
将第一个列表的第一个项目首次出现在第二个列表中,并在出现的索引处对第二个列表进行分区。将第二个列表的第一个片段与第一个列表
组合在一起<强>代码强>
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)