Я пытаюсь выяснить, есть ли способ разделить значение каждой итерации понимания списка только один раз, но использовать его дважды в выводе.
В качестве примера проблемы, которую я пытаюсь решить, у меня есть строка:
a = "1;2;4\n3;4;5"
 И я хотел бы выполнить это:
>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]
 Без необходимости бега расколоть три раза. Итак, что-то вроде этого (что, очевидно, является неверным синтаксисом, но, надеюсь, этого достаточно, чтобы донести сообщение):
[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]
 В этом вопросе я не ищу причудливых способов получить 2-й и 3-й столбец строки. Это просто способ подать конкретный пример. Я мог бы для примера использовать:
[x.split(";")[1:3] for x in a.split("\n")]
 Возможные решения, о которых я подумал:
- Не использовать понимание списка
 - Оставь как есть
 -  Используйте 
csv.DictReader, назовите мои столбцы и что-то наподобиеStringIOчтобы дать ему входные данные. 
В большинстве случаев это хороший шаблон, который можно использовать, а не конкретный случай, поэтому сложно ответить на вопросы типа "почему вы хотите это сделать" или "что это за"?
Обновление: после прочтения приведенного ниже решения я пошел и провел несколько тестов скорости. И я обнаружил в своих самых базовых тестах, что предоставленное решение было на 35% быстрее, чем простое решение выше.