Najpierw proszę wybaczyć mi nieco kiepski tytuł. Nie bardzo wiedziałem, jak to powiedzieć. Jeśli ktoś mógłby zaproponować lepszy tytuł, który byłby świetny.Zrozumienie listy w języku Python Dzielenie zmiennej pętli
Próbuję dowiedzieć się, czy istnieje sposób, aby podzielić wartość każdej iteracji listy zrozumienie tylko raz, ale użyć go dwa razy w danych wyjściowych. Przykładem problemu próbuję rozwiązać jest:
Mam ciąg
a = "1;2;4\n3;4;5"
I chciałbym, aby wykonać to:
>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]
bez konieczności docierania podzielone trzykrotnie . Więc coś takiego (co jest oczywiście nieprawidłowa składnia, ale mam nadzieję, że to wystarczy, aby otrzymać wiadomość po drugiej):
[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]
W tej kwestii jestem nie szukają fantazyjnych sposobów na 2. i 3. kolumny łańcucha . To tylko jeden ze sposobów przedstawienia konkretnego przykładu. Mógłbym o kursie dla przykładu użytku:
[x.split(";")[1:3] for x in a.split("\n")]
Możliwe rozwiązania Myślałem o:
- Nie używać wyrażeń listowych
- Zostaw go jak
- Użyj csv.DictReader , nazwij moje kolumny i coś takiego jak StringIO, aby dać mu dane wejściowe.
Jest to przede wszystkim coś, co byłoby dobrym wzorem do zastosowania, a nie konkretnym przypadkiem, więc trudno jest odpowiedzieć na pytanie "dlaczego chcesz to zrobić" lub "do czego to służy".
góry dzięki :)
UPDATE: Po przeczytaniu rozwiązanie jest poniżej poszedłem i prowadził kilka testów prędkości. I w moich bardzo podstawowych testach odkryłem, że dostarczone rozwiązanie było o 35% szybsze niż powyższe rozwiązanie naiwne.
dzięki bardzo fajne :) – Nick