eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zrobić grupowanie w kolejności › Re: Jak zrobić grupowanie w kolejności
  • X-Received: by 2002:a37:4146:: with SMTP id o67mr29631652qka.232.1574179914024; Tue,
    19 Nov 2019 08:11:54 -0800 (PST)
    X-Received: by 2002:a37:4146:: with SMTP id o67mr29631652qka.232.1574179914024; Tue,
    19 Nov 2019 08:11:54 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.r
    u!j16no4084624qtl.0!news-out.google.com!g53ni415qtg.0!nntp.google.com!j16no4084
    610qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 19 Nov 2019 08:11:53 -0800 (PST)
    In-Reply-To: <5dd3e574$0$511$65785112@news.neostrada.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.192.68.153;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 213.192.68.153
    References: <5dd2981a$0$17364$65785112@news.neostrada.pl>
    <9...@g...com>
    <5dd2e826$0$17359$65785112@news.neostrada.pl>
    <0...@g...com>
    <f...@g...com>
    <5dd3e574$0$511$65785112@news.neostrada.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <3...@g...com>
    Subject: Re: Jak zrobić grupowanie w kolejności
    From: g...@g...com
    Injection-Date: Tue, 19 Nov 2019 16:11:54 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:214455
    [ ukryj nagłówki ]

    W dniu wtorek, 19 listopada 2019 13:52:06 UTC+1 użytkownik Borneq napisał:

    > >> [[1,10],[7,3],[10],[100],[5,6]]
    > > Trochę poprawiłem nazwy i formatowanie, może teraz będzie nieco czytelniejsze:
    > > https://rextester.com/CRWPJS53169
    >
    > Wyniki daje dobre.
    > Trzeba by przeanalizować, jakie znaczenie ma ++ ?

    ++ to sklejanie list:

    [1,2]++[3,4] daje [1,2,3,4]

    Niestety w przypadku języków funkcyjnych dopisywanie elementu na koniec listy jest
    raczej kosztowne. No ale to szczegół


    > jest tu jakiś sposób rekurencyjny

    Jest rekurencyjny, ale to prosta rekurencja, którą można łatwo zamienic na pętlę.
    Jakby co, to napisałem rozwiązanie rekurencyjne w Pythonie.

    Wariant iteracyjny wygląda tak:

    def igroups(l, cond):
    result = []
    group = []
    for x in l:
    group += [x]
    if cond(group):
    result += [group]
    group = []
    if group:
    result += [group]
    return result


    > grouped [] [] = []
    > grouped [] g = [g]
    > Te dwa powyżej rozumiem
    > a
    > grouped (h:t) g
    > | (cond (g++[h])) = [g++[h]]++(grouped t [])
    > grouped (h:t) g = grouped t (g++[h])
    >
    > ?

    W pierwszym przypadku jest tzn. "pattern guard", tzn. jeżeli funkcja "cond" dla
    argumentu g++[h] zwróci True, to zwracamy [g++[h]] ++ (grouped t []), albo innymi
    słowy - zamykamy bieżącą grupę z dopisanym bieżącym elementem i tworzymy nową pustą
    grupę, którą będziemy przetwarzać na pozostałych elementach listy.

    Jeżeli "cond" nie jest spełnione, to dodajemy bieżący element do bieżącej grupy i
    przetwarzamy resztę listy.

    Tutaj jest Pythonowa wersja, w której umieściłem Haskellowe patterny i guardy w
    komentarzach

    def groups(l, cond):
    def group(l, g):
    if l: ### grouped (h:t) g -- lista niepusta
    h, *t = l
    if cond(g+[h]): ### | (cond (g++[h])) -- warunek spelniony
    return [g+[h]]+group(t, [])
    return group(t, g+[h]) ### -- warunek niespelniony
    if g:
    return [g] ### grouped [] g -- grupa jest niepusta
    return [] ### grouped [] [] -- pusta grupa
    return group(l, [])


    Oba warianty możesz potestować tutaj:
    https://rextester.com/FCY59693

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: