1. Генератор списков (list comprehension) с условием. Простой генератор создаёт список, применяя к каждому элементу из исходного итерируемого (перебираемого) объекта (dict, set, list, tuple или более сложные объекты, создаваемые какими-то функциями) такое-то действие, например, x*x for x in spisok - взять очередной элемент x (x это просто временное имя для генерирования, можно и ... for y in spisok) из списка spisok, умножить его на самого себя и поместить в результирующий список.
Генератор с условием проверяет очередной элемент по условию и применяет для вычисления результата одну или другую формулу
2. здесь к объекту типа строка, где вписана специальная метка, применяется функция format, которая на основе этой метки вставит в строку содержимое своего аргумента (names). Подробнее читай про python format