Как найти совпадение в списке python?

Есть список:
a=[[1,2,3],[2,4,3],[5,2,1],[1,2,7]]
Нужно выделить все подсписки, которые подходят под [1,2,*] без перебора списка. Как это сделать силами стандартного python?
  • Вопрос задан
  • 19448 просмотров
Пригласить эксперта
Ответы на вопрос 3
Как это можно сделать без перебора? Ведь в каком-то виде, пусть и неявном, перебор всё равно будет иметь место. Вот такой, например:

lst = [[1,2,3],[2,4,3],[5,2,1],[1,2,7]]
prefix = [1, 2]

def search(lst, prefix):
    l = len(prefix)
    for item in lst:
        if item[:l] == prefix:
            yield item

print list(search(lst, prefix)))


Или такой:
length = len(prefix)
results = [item for item in lst if item[:length] == prefix]
Ответ написан
Комментировать
@throughtheether
human after all
Нужно выделить все подсписки, которые подходят под [1,2,*] без перебора списка.
Если вы хотите выбрать все элементы первого уровня вложенности ("подсписки"), удовлетворяющие условию, без рассмотрения каждого из них (без перебора), то никак. В случае, если список a большой, вы можете рассматривать каждый элемент при добавлении его в список a и, в случае выполнения условия, добавлять его (или его индекс) в другой список/множество, хранящий/хранящее совпадения. Общая "сложность" будет такой же, но она, при соответствующей организации кода, будет "размазана" во времени, что иногда может быть предпочтительно. Но в таком случае паттерн должен быть известен заранее.
Ответ написан
Комментировать
@velociraptor
lst = [[1,2,3],[2,4,3],[5,2,1],[1,2,7]]
prefix = [1, 2]
newlst = filter(lambda s: s[0] == prefix[0] and s[1] == prefix[1], lst)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы