Как проверить есть ли случайная последовательность определенных элементов в другом списке

Есть список их 3х чисел num = [a,b,c] и есть большой список из чисел numbers = [[q,w,e], [f,g,h], [b,a,c]], программа должна выдать True, т.к. в numbers есть одна из возможных перестановок nums. Как это написать в программе?


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

Автор решения: QWERTYZ PB
num = [1, 2, 3]

test_numbers = [[1, 4, 56], [7, 76, 45], [2, 3, 1]]

def func(numbers, num):
    for i in numbers:  # Перебираем каждый вложенный список

        if sum(i) == sum(num): # Если сумма цифр вложенного списка равна 
            return True  #   сумме цифр нашего списка num возвращаем True

    return False   # Если таких совпадений нет, то возвращаем False

print(func(test_numbers, num))  # Проверяем => True
→ Ссылка
Автор решения: zur9h
from itertools import permutations

def check_permutation(num, numbers):
    perms = set(permutations(num))
    for sublist in numbers:
        if tuple(sublist) in perms:
            return True
    return False

num = [1, 2, 3]
numbers = [[4, 5, 6], [7, 8, 9], [2, 1, 3]]

result = check_permutation(num, numbers)
print(result)
  1. Сначала прогоняем все возможные перестановки чисел из списка num с помощью функции permutations.
  2. Затем проверяем, есть ли какая-либо из этих перестановок в списке numbers, используя цикл for и проверку на наличие во множестве perms.
  3. Если находится соответствие, функция возвращает True, в противном случае - False.
→ Ссылка
Автор решения: Stanislav Volodarskiy
# подготовка, делается один раз
patterns = set(tuple(sorted(v)) for v in [[q, w, e], [f, g, h], [b, a, c]])

# проверка, делается многократно
if tuple(sorted([a, b, c])) in patterns:
    ...

Если числа в списках не повторяются, то можно так:

# подготовка, делается один раз
patterns = set(map(frozenset, [[q, w, e], [f, g, h], [b, a, c]]))

# проверка, делается многократно
if frozenset([a, b, c]) in patterns:
    ...
→ Ссылка