Объясните, как работает строчка #7
from itertools import permutations
g = 'AB BC CD DA'.split()
t = '24 13 24 13'.split()
print('1 2 3 4')
for p in permutations('ABCD'):
if all(str(p.index(b2) + 1) in t[p.index(b1)] for b1, b2 in g): # 7
print(*p)
break
Ответы (1 шт):
Автор решения: Evgenii Evstafev
→ Ссылка
Если правильно посчитал нумерацию строк :D
if all(str(p.index(b2)+1) in t[p.index(b1)] for b1, b2 in g):
По шагам:
for b1, b2 in g:- перебираем элементы в итерируемом объектеg. Предполагается, что каждый элементgсостоит из двух значений, которые присваиваются переменнымb1иb2на каждой итерации.p.index(b1)- находим индекс/позицию элементаb1в спискеp.t[p.index(b1)]- используем найденный индексb1для доступа к элементу в объектеt.p.index(b2)- находим индекс элементаb2в спискеp.p.index(b2) + 1- к индексуb2прибавляется 1.str(...)- преобразуем результатp.index(b2) + 1число в строку.... in ...- проверяем, содержится ли строка (полученная в шаге 6), как подстрока внутри значения, полученного изtна шаге 3. Эта проверка выполняется для каждой пары(b1, b2).all(...)- эта функция принимает результаты всех проверок (из шага 7) для каждой пары(b1, b2)изg. Она возвращаетTrueтолько в том случае, если ВСЕ проверки вернулиTrue. Если хотя бы одна проверка вернулаFalse,all()вернетFalse.if ...:- после двоеточия выполнится только если функцияall()вернулаTrue.
Итого: Условие if истинно, если для КАЖДОЙ пары (b1, b2) в g, строковое представление (индекса b2 в p плюс 1) содержится в элементе t, который соответствует индексу b1 в p.