Я немного поиграл с этим, чтобы попытаться чему-то научиться, понимая, что ответ уже дан. Когда я запускаю принятый ответ, я получаю возвращаемое значение [9, 10, 5, 4, 9]. Я не был уверен, было ли повторное 9 приемлемым или нет. Предполагая, что все в порядке, я запустил пробную версию, используя понимание списка, чтобы увидеть, что это имеет какое-то значение. Мои результаты:
from numba import jit
def createLists():
l1 = [15, 9, 10, 56, 23, 78, 5, 4, 9]
l2 = [9, 4, 5, 36, 47, 26, 10, 45, 87]
@jit
def listComp():
l1, l2 = createLists()
return [i for i in l1 for j in l2 if i == j]
% timeit listComp () 5,84 микросекунды +/- 10,5 наносекунд
Или, если вы можете использовать Numpy, этот код еще быстрее и удаляет дубликаты "9 "и намного быстрее с подписью Numba.
import numpy as np
from numba import jit, int64
@jit(int64[:](int64[:], int64[:]))
def JitListComp(l1, l2):
l3 = np.array([i for i in l1 for j in l2 if i == j])
return np.unique(l3) # and i not in crossSec]
@jit
def CreateList():
l1 = np.array([15, 9, 10, 56, 23, 78, 5, 4, 9])
l2 = np.array([9, 4, 5, 36, 47, 26, 10, 45, 87])
return JitListComp(l1, l2)
CreateList()
Out[39]: array([ 4, 5, 9, 10])
%timeit CreateList()
1.71 µs ± 10.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)