Как с помощью match case проверить тип данных и присвоить в переменные?

Как реализовать этот код с помощью match, case

a = [1, 2, 3]
if isinstance(a, list) and len(a) == 3:
    a1 = a[0]
    a2 = a[1]
    a3 = a[2]

Такой способ слишком громоздкий

match a:
    case list(a):
        a1 = a[0]
        a2 = a[1]
        a3 = a[2]

Такой просто проверяет, что это у нас коллекция

match a:
    case a1, a2, a3:
        print(a1, a2, a3)

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

Автор решения: GrAnd
match a:
    case [a1, a2, a3] if isinstance(a, list):
        print(a1, a2, a3)

Но это не сильно элегантнее чем

if isinstance(a, list) and len(a) == 3:
   a1, a2, a3 = a
   print(a1, a2, a3)
→ Ссылка
Автор решения: insolor

Работает такой вариант:

a = [1, 2, 3]

match a:
    case list([a1, a2, a3]):
        print("List", a1, a2, a3)
    case _:
        print("Not matched")

- выведет List 1 2 3

Со значениями других типов, например:

a = (1, 2, 3)

match a:
    case list([a1, a2, a3]):
        print("List", a1, a2, a3)
    case _:
        print("Not matched")

- выведет Not matched

Со списком длиной не равной 3 (например, a = [1, 2, 3, 4]) также выведет Not matched.

→ Ссылка