итерация по элементам вложенных списков
Есть список типа: 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 шт):
Добавление первого элемента списка, что присутствует в множестве:
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))
]