• Re: in Python? -- Chunk -- (ChunkC '(a a b b b)), ==> ((a 2) (b 3))

    From MRAB@21:1/5 to HenHanna via Python-list on Sun Jun 9 23:50:26 2024
    On 2024-06-09 22:20, HenHanna via Python-list wrote:

    Chunk, ChunkC -- nice simple way(s) to write these in Python?


    (Chunk '(a a b a a a b b))
    ==> ((a a) (b) (a a a) (b b))


    (Chunk '(a a a a b c c a a d e e e e))
    ==> ((a a a a) (b) (c c) (a a) (d) (e e e e))


    (Chunk '(2 2 foo bar bar j j j k baz baz))
    ==> ((2 2) (foo) (bar bar) (j j j) (k) (baz baz))

    _________________

    (ChunkC '(a a b b b))
    ==> ((a 2) (b 3))

    (ChunkC '(a a b a a a b b))
    ==> ((a 2) (b 1) (a 3) (b 2))

    You can make use of itertools.groupby.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From HenHanna@21:1/5 to MRAB on Sun Jun 9 16:16:27 2024
    On 6/9/2024 3:50 PM, MRAB wrote:
    On 2024-06-09 22:20, HenHanna via Python-list wrote:

    Chunk, ChunkC -- nice simple way(s) to write these in Python?


    (Chunk  '(a a   b    a a a   b b))
          ==> ((a a) (b)  (a a a) (b b))


    (Chunk  '(a a a a   b   c c   a a   d   e e e e))
          ==> ((a a a a) (b) (c c) (a a) (d) (e e e e))


    (Chunk  '(2 2   foo   bar bar   j j j   k   baz baz))
          ==> ((2 2) (foo) (bar bar) (j j j) (k) (baz baz))

    _________________

    (ChunkC  '(a a   b b b))
           ==> ((a 2)  (b 3))

    (ChunkC  '(a a   b      a a a   b b))
           ==> ((a 2)  (b 1)  (a 3)   (b 2))

    You can make use of itertools.groupby.



    Thanks! i'll try it.


    Scheme (Gauche)

    (use srfi-1) ; span

    (define (gp x)
    (if (null? x) '()
    (let-values (((F L) (span (cut equal? (car x) <>) x)))
    (cons F (gp L)))))

    (print (gp '(a b b a a a b b b b)))
    (print (gp '(c c c a d d d d a e e e e e)))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From HenHanna@21:1/5 to avi.e.gross@gmail.com on Sun Jun 9 19:36:39 2024
    XPost: comp.lang.scheme

    On 6/9/2024 7:05 PM, avi.e.gross@gmail.com wrote:
    I remembered that HenHanna had been hard to deal with in the past and when
    my reply to him/her/them bounced as a bad/fake address it came back to me that I am better off not participating in this latest attempt to get us to perform then probably shoot whatever we say down.

    A considerate person would ask questions more clearly and perhaps explain what language they are showing us code from and so on.

    Life is too short to waste.

    -----Original Message-----
    From: Python-list <python-list-bounces+avi.e.gross=gmail.com@python.org> On Behalf Of HenHanna via Python-list
    Sent: Sunday, June 9, 2024 5:20 PM
    To: python-list@python.org
    Subject: in Python? -- Chunk -- (ChunkC '(a a b b b)), ==> ((a 2) (b 3))

    Chunk, ChunkC -- nice simple way(s) to write these in Python?


    (Chunk '(a a b a a a b b))
    ==> ((a a) (b) (a a a) (b b))


    (Chunk '(a a a a b c c a a d e e e e))
    ==> ((a a a a) (b) (c c) (a a) (d) (e e e e))


    (Chunk '(2 2 foo bar bar j j j k baz baz))
    ==> ((2 2) (foo) (bar bar) (j j j) (k) (baz baz))

    _________________

    (ChunkC '(a a b b b))
    ==> ((a 2) (b 3))

    (ChunkC '(a a b a a a b b))
    ==> ((a 2) (b 1) (a 3) (b 2))



    i was just curiuos about simple, clever way to write it in Python


    in Scheme (Gauche)

    (use srfi-1) ;; span

    (define (gp x)
    (if (null? x) '()
    (let-values (((F L) (span (cut equal? (car x) <>) x)))
    (cons F (gp L)))))

    (print (gp '(a b b a a a b b b b)))
    (print (gp '(c c c a d d d d a e e e e e)))

    (define (gpC x) (map (lambda (x) (list (car x) (length x))) (gp x)))

    (print (gpC '(a b b a a a b b b b)))
    (print (gpC '(c c c a d d d d a e e e e e)))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rob Cliffe@21:1/5 to HenHanna via Python-list on Mon Jun 10 14:29:08 2024
    import itertools

    def chunk1(seq):
        return [ ch * len(list(grp)) for (ch, grp) in itertools.groupby(s) ]

    def chunk2(seq):
        return [ (ch, len(list(grp))) for (ch, grp) in itertools.groupby(s) ]

    s='aaabbccccaa'
    print(chunk1(s))
    print(chunk2(s))
    ###################################
    Program output:
    ['aaa', 'bb', 'cccc', 'aa']
    [('a', 3), ('b', 2), ('c', 4), ('a', 2)]

    Rob Cliffe

    On 09/06/2024 22:20, HenHanna via Python-list wrote:

    Chunk, ChunkC -- nice simple way(s) to write these in Python?


    (Chunk  '(a a   b    a a a   b b))
        ==> ((a a) (b)  (a a a) (b b))


    (Chunk  '(a a a a   b   c c   a a   d   e e e e))
        ==> ((a a a a) (b) (c c) (a a) (d) (e e e e))


    (Chunk  '(2 2   foo   bar bar   j j j   k   baz baz))
        ==> ((2 2) (foo) (bar bar) (j j j) (k) (baz baz))

    _________________

    (ChunkC  '(a a   b b b))
         ==> ((a 2)  (b 3))

    (ChunkC  '(a a   b      a a a   b b))
         ==> ((a 2)  (b 1)  (a 3)   (b 2))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From HenHanna@21:1/5 to Rob Cliffe on Tue Jun 11 15:07:34 2024
    On 6/10/2024 6:29 AM, Rob Cliffe wrote:
    import itertools

    def chunk1(seq):
        return [ ch * len(list(grp)) for (ch, grp) in itertools.groupby(s) ]

    def chunk2(seq):
        return [ (ch, len(list(grp))) for (ch, grp) in itertools.groupby(s) ]

    s='aaabbccccaa'
    print(chunk1(s))
    print(chunk2(s))
    ###################################
    Program output:
    ['aaa', 'bb', 'cccc', 'aa']
    [('a', 3), ('b', 2), ('c', 4), ('a', 2)]

    Rob Cliffe



    thank you... OMG... For 10 minutes... i was SO mystified by
    the question...
    How can this code work??? , when it's
    > def chunk1(seq):
    and it's [s] within the def-body ?

    it seemed as if the Compiler was doing a DWIM (Do what i mean) trick.



    On 09/06/2024 22:20, HenHanna via Python-list wrote:

    Chunk, ChunkC -- nice simple way(s) to write these in Python?


    (Chunk  '(a a   b    a a a   b b))
        ==> ((a a) (b)  (a a a) (b b))


    (Chunk  '(a a a a   b   c c   a a   d   e e e e))
        ==> ((a a a a) (b) (c c) (a a) (d) (e e e e))


    (Chunk  '(2 2   foo   bar bar   j j j   k   baz baz))
        ==> ((2 2) (foo) (bar bar) (j j j) (k) (baz baz))

    _________________

    (ChunkC  '(a a   b b b))
         ==> ((a 2)  (b 3))

    (ChunkC  '(a a   b      a a a   b b))
         ==> ((a 2)  (b 1)  (a 3)   (b 2))


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to HenHanna on Sat Jun 15 02:53:52 2024
    XPost: comp.lang.scheme

    On 6/9/2024, HenHanna wrote:

    (Chunk '(a a b a a a b b))
    ==> ((a a) (b) (a a a) (b b))


    Gauche Scheme:

    (use gauche.sequence)

    (group-sequence '(2 4 4 3 0 5 8 6 6 6))
    ===>
    ((2) (4 4) (3) (0) (5) (8) (6 6 6))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)