Выражение типа:
next(subl for subl in l if 'sq' in subl)
даст вам именно тот подсписок, который вы ищете (или поднимет StopIteration
, если такого подсписка нет; если последнее поведение не то, что вы хотите, передайте next
второй аргумент [[например, * 1006] * или None
, в зависимости от того, что именно вы хотите!]], чтобы вернуться в этом случае). Поэтому просто используйте это значение результата или присвойте ему любое имя и т. Д.
Конечно, вы можете легко одеть это выражение в любую функцию, какую захотите, например ::
def gimmethesublist(thelist, anitem, adef=None):
return next((subl for subl in thelist if anitem in subl), adef)
но если вы работаете с конкретными переменными или значениями, кодирование выражения в строке часто может быть предпочтительнее.
Редактировать : если вы хотите найти несколько элементов, чтобы найти подсписок, содержащий любой из (или более) ваших элементов,
its = set(['blah', 'bluh'])
next(subl for subl in l if its.intersection(subl))
и если вы хотите найти подсписок, содержащий все ваших товаров,
next(subl for subl in l if its.issubset(subl))