итерация по элементам вложенных списков

Есть список типа: pd=[[{1,2,3},[5,7,3]],[{2,7,8},[9,8,4]]]. Нужно брать первый элемент вложенного списка и проверять, есть ли этот элемент во множестве слева. Если есть, то поиск прерывается и элемент добавляют в новый список lst=[]. В данном примере результат должен получиться следующий:

lst=[3,8]

Т.е. 3 добавили из списка pd[0][1] и 8 добавили из pd[1][1]. Ожидаемая длина pd, т.е. len(pd) = 6-9 вложенных пар (множество, список) за одну итерацию цикла. Всего итераций >25 000 000

Мой код представлен ниже, но я ищу более оптимальное решение, возможно, через функцию map, lambda или list comprehension

for i in pd:
    for j in i[1]:
        if j in i[0]:
            lst.append(j)
            break

Ответы (1 шт):

Автор решения: gil9red

Добавление первого элемента списка, что присутствует в множестве:

pd = [[{1,2,3},[5,7,3]],[{2,7,8},[9,8,4]]]
lst = []
for sets, lists in pd:
    for x in lists:
        if x in sets:
            lst.append(x)
            break
print(lst)
# [3, 8]

Совмещение перебора и проверки:

lst = []
for sets, lists in pd:
    for x in filter(lambda x: x in sets, lists):
        lst.append(x)
        break
print(lst)

Функциональная магия (если уверены, что хоть один элемент списка есть в множестве):

lst = [
    next(filter(lambda x: x in sets, lists)) 
    for sets, lists in pd
]

Если не уверены (что-то избыточно получилось...):

lst = [
    next(filter(lambda x: x in sets, lists)) 
    for sets, lists in pd
    if any(filter(lambda x: x in sets, lists))
]
→ Ссылка