Используя тот факт, что dict
s сохраняет порядок вставки своих ключей (который станет частью спецификации в Python 3.7, но уже верен в 3.6), это можно сделать в одну короткую строку:
# create some data
>>> import random
>>> a = [random.randint(0, 3) for _ in range(20)]
>>> b = [random.randint(0, 3) for _ in range(20)]
>>>
>>> a
[0, 3, 2, 1, 2, 0, 1, 2, 0, 2, 1, 1, 0, 3, 1, 3, 1, 2, 3, 2]
>>> b
[1, 0, 3, 2, 2, 2, 2, 3, 1, 2, 1, 1, 1, 1, 3, 0, 0, 0, 3, 3]
>>>
# this one line is all we need
>>> au, bu = zip(*dict.fromkeys(zip(a, b)))
>>>
# admire
>>> au
(0, 3, 2, 1, 2, 0, 1, 3, 1, 1, 2, 3)
>>> bu
(1, 0, 3, 2, 2, 2, 1, 1, 3, 0, 0, 3)
Обратите внимание, что вопреки тому, что можно ожидать, это не работает с наборами - действительно нужно использовать dict (с фиктивными значениями).