l.....k
l.....k
#python #naukaprogramowania
mam taką sobie listę:
a = ['2/1/31;access/hybrid',
'2/1/32;access/hybrid',
'2/1/9;access/hybrid',
'2/1/40;access/hybrid',
'2/1/4; check in config']
jak to posegregować by porty były numerycznie od najmniejszego? nie radze sobie z taką segregacją :(
  • Najlepsze
  • Wszystkie komentarze
venomik
@luukasek: Piszesz metodę zwracająca Ci liczbę, po której ma być sortowanie i używasz jej jako argumentu key w sorted.
l.....k
l.....k
dobra, w koncu miałem chwilę i to napisałem,
wiem że to nie kod #programista15k, niemniej dla mnie działa, i zrozumiałem o co chodzi w tym sortowaniu.
sorted daje mi format z którego jestem już wstanie wydłubac sobie to co potrzebuję i jest wg kolejności.
Dzieki za wytłumaczenia!

for x in
venomik
@luukasek: W sensie sortowanie (a nie segregacja) ma być po trzeciej liczbie z każdego stringa?
l.....k
l.....k
@venomik: port 2/1/4; check in config' ma być pierwszy bo najniższy z tej listy, i dalej w dół aż do '2/1/40;access/hybrid'
heniek_8
@nowa_zielonka: to sortuje jak tekst 40 < 9
l.....k
l.....k
@nowa_zielonka: split! kuźwa, a ja dawałem x!!
@heniek_8: @venomik: dzięki za pomoc!
l.....k
l.....k
@nowa_zielonka: też tak nie do końca; output z Twojego to:
['2/1/31;access/hybrid', '2/1/32;access/hybrid', '2/1/4; check in config', '2/1/40;access/hybrid', '2/1/9;access/hybrid']
l.....k
l.....k
@venomik: no nie umiem tego :( nie wiem jak to napisać. próbowałem jak wyżej napisałem przez , key=lambda ale dawałem x nie działa
n.....a
n.....a
@luukasek: Napisałem to przed ogarnięciem że tam musi rozdzielać to 2/1/4, tak jak pisze @venomik trzeba zwracać liczbę na podstawie tego stringa (możesz zrobić split na '2/1/32' po '/', potem for żeby przejść przez każdy element i zerowy element mnożyć przez 1000, pierwszy przez 100 i dodać wszystkie do siebie, wtedy będziesz mieć to jako id z odpowiednią wielkością do posortowania, zwracasz id)
l.....k
l.....k
dodałem 2 splita na port i po ostatnim argumencie;
sorted_a = sorted(a, key=lambda x: x.split(';')[0].split("/")[-1])
zgadnij co?


@nowa_zielonka:
n.....a
n.....a
@luukasek: No nie będzie działać po ten split('/') zwraca Ci 3 elementy, np. [2, 1, 32]. Teraz musisz połączyć te 3 elementy w jeden indeks po którym odbędzie się sortowanie, np. 2 * 1000 + 1 * 100 + 32 = 2132. Nie możesz po prostu zrobić konkatenacji, bo wtedy [2, 1, 3] będzie mniejsze od np. [1, 1, 32]: 213 < 1132, ale 2103 > 1132
l.....k
l.....k
@nowa_zielonka: ok jasne! dzięki! :)
n.....a
n.....a
@luukasek: Elegancko, nie przejmuj się że coś można by było zrobić lepiej, jak dojdziesz do wprawy to wtedy się na tym skupisz ( ͡° ͜ʖ ͡°)