Это дает правильный результат, потому что у вас есть 0
и dog
в первом элементе L2
которого есть 0
индекс.
Вот более пифонический подход, который получает индекс, основанный на первом вхождении пар в L2
:
In [158]: L2 = ['cat car dog', 'cat house dog', 'cat car', 'cat dog']
In [159]: L2 = [s.split() for s in L2]
In [160]: combinations = np.column_stack((np.repeat(L1, 5), np.tile(L1, 5))).reshape(5, 5, 2)
# with 0 as the start of the indices
In [162]: [[next((i for i, sub in enumerate(L2) if x in sub and y in sub), 0) for x, y in row] for row in combinations]
Out[162]:
[[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[1, 1, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
# with 1 as the start of the indices
In [163]: [[next((i for i, sub in enumerate(L2, 1) if x in sub and y in sub), 0) for x, y in row] for row in combinations]
Out[163]:
[[1, 1, 2, 0, 1],
[1, 1, 2, 0, 1],
[2, 2, 2, 0, 0],
[0, 0, 0, 0, 0],
[1, 1, 0, 0, 1]]