Zmienna pętli dzielenia listy

Najpierw proszę wybacz mi nieco kiepski tytuł. Nie byłem pewien, jak to powiedzieć. Jeśli ktoś mógłby zasugerować lepszy tytuł, byłby świetny.

Próbuję dowiedzieć się, czy istnieje sposób na rozdzielenie wartości każdej iteracji zrozumienia listy tylko raz, ale użyj jej dwukrotnie na wyjściu. Przykładem problemu, który próbuję rozwiązać, jest:

Mam sznurek

<code>a = "1;2;4\n3;4;5"
</code>

Chciałbym to wykonać:

<code>>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]
</code>

Bez potrzeby biegania podzielony trzy razy. Więc coś takiego (co jest oczywiście niepoprawną składnią, ale mam nadzieję, że wystarczy, aby przekazać wiadomość):

<code>[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]
</code>

W tym pytaniu jestemnie szukam fantazyjnych sposobów na uzyskanie drugiej i trzeciej kolumny ciągu. To tylko sposób na podanie konkretnego przykładu. Mogę na kurs dla przykładu użyć:

<code>[x.split(";")[1:3] for x in a.split("\n")]
</code>

Możliwe rozwiązania, o których pomyślałem:

Nie używaj zrozumienia listyZostaw to tak jak jestUżyjcsv.DictReader, nazwij moje kolumny i coś w tym styluStringIO dać mu dane wejściowe.

Jest to zazwyczaj coś, co byłoby dobrym wzorem, aby móc użyć go zamiast konkretnej sprawy, więc trudno jest odpowiedzieć na pytania typu „dlaczego chcesz to zrobić” lub „co to jest dla”.

Aktualizacja: Po przeczytaniu poniższego rozwiązania poszedłem i przeprowadziłem kilka testów prędkości. I w moich bardzo podstawowych testach stwierdziłem, że dostarczone rozwiązanie było o 35% szybsze niż powyższe naiwne rozwiązanie.

questionAnswers(1)

yourAnswerToTheQuestion