Вы можете использовать понимание списка и проверить, какой первый элемент кортежа содержится в l1
. Вы можете уменьшить сложность операции, создав set
из l1
:
s1 = set(l1)
l3 = [s for s,*_ in l2 if s in s1]
# ['the', 'of', 'a', 'to', 'in', 'and', 'that']
Или мы также можем использовать zip
и индексировать первый элемент:
set(l1).intersection(list(zip(*l2))[0])
Обратите внимание, что ваш подход не работает, поскольку вы пытаетесь индексировать с помощью кортежей. lambda x
получает кортеж каждый раз, так как вы итерируете по l2
напрямую. Если у вас есть длина 2
подсписков, вы также можете рассмотреть возможность работы со словарями, к которым вы можете получить доступ, используя заданный ключ. Учитывая структуру ваших данных, похоже, что это может быть хорошей альтернативой для вас:
d = dict(l2)
[i for i in l1 if i in d]
# ['the', 'and', 'to', 'of', 'a', 'in', 'that']