Сначала, пожалуйста, простите меня за несколько плохой титул. Я не был уверен, как это сказать. Если бы кто-то мог предложить лучший титул, это было бы здорово.Python List Comprehensions Переменная цикла разделения
Я пытаюсь выяснить, есть ли способ разделить значение каждой итерации понимания списка только один раз, но использовать его дважды в выводе. Пример проблем я пытаюсь решить это:
У меня есть строка
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, чтобы дать ему вход.
Это в основном то, что было бы хорошим образцом, чтобы использовать его, а не конкретным случаем, поэтому трудно ответить на вопрос «зачем вы хотите это делать» или «что это такое»?
заранее спасибо :)
UPDATE: После того, читая решение ниже я пошел и провел несколько тестов скорости. И я нашел в своих самых основных тестах, что предоставленное решение было на 35% быстрее, чем наивное решение выше.
спасибо очень круто :) – Nick