[Tutor] problem solving with lists

Mayo Adams mayoadams at gmail.com
Tue Mar 8 12:38:11 EST 2022


>
>  with constraint that a pair of letters, p.e. ['a', 'b', ..] can occur
> only once in all 20 sublists
>

Was the assignment for adjacent letters? Surely it was, if " or in the next
part means "namely":

  or if  list1 contains sublist ['a', 'b',..],  such a sublist cannot appear

> in list2 through list5.


On Tue, Mar 8, 2022 at 10:17 AM Dennis Lee Bieber <wlfraed at ix.netcom.com>
wrote:

>
>                 o/~             Talking to myself in public...  o/~
>
> On Mon, 07 Mar 2022 13:28:49 -0500, Dennis Lee Bieber
> <wlfraed at ix.netcom.com> declaimed the following:
>
> >NOTE:  All solutions are using itertools.combinations and
> >itertools.filterfalse, but differ on the filter predicate function.
> >
>
>         If the OP is still "listening"...
>
>         Generating all (1820) combinations first, and then trying to
> exclude
> those sharing adjacent letter pairs by testing the first against the rest
> of the list is a complete failure -- accepting only the last generated
> quad-letter (since, if you've eliminated all prior quads for sharing letter
> pairs, the only remaining quad is now unique sharing with nothing).
>
>         In contrast, the step-wise generate/filter-against-accepted-only
> process, begins with one accepted quad (the first, since there is nothing
> else against which to filter it out).
>
>         One could still generate all 1820 combinations, but the filter
> logic
> still has to be: reject a quad if it shares any letter pairs with
> previously accepted quads (NOT with the rest of the 1820 combinations). If
> running from the top-down (generation order), the result would be the same
> as the step-wise method that generates new quads on demand, and only has to
> maintain the shorter "accepted" list of quads.
>
>         Of course, one could process the full list in reverse (accepting
> the
> last quad automatically, the checking the next prior quad against it,
> etc.). This WILL result in a different set of quads being accepted. Might
> as well just run the step-wise process over a "reversed" generator (which
> will likely generate all 1820 in order to reverse the list, but that is
> behind the scenes).
>
> Generator order:
> quadFilter = filterfalse(theFilter, quads)
>
> >>> 23
> [['abcd', 'acef', 'adeg', 'aehi'],
>  ['afgh', 'agij', 'ahjk', 'aikl'],
>  ['ajlm', 'akmn', 'alno', 'amop'],
>  ['bdfh', 'beil', 'bfim', 'bgjm'],
>  ['bhkn', 'binp', 'cfjn', 'cgko'],
>  ['chlo', 'dglp', 'dhmp']]
>
> Reversed order:
> quadFilter = filterfalse(theFilter, reversed(list(quads)))
>
> >>> 20
> [['mnop', 'klnp', 'jlmp', 'jkmo'],
>  ['hilp', 'gikp', 'ghlo', 'fijp'],
>  ['fhko', 'fgkn', 'ehjo', 'egjn'],
>  ['efjm', 'deip', 'cdio', 'bdhp'],
>  ['bcin', 'adgp', 'acho', 'abim']]
>
>         Interesting -- reversed produced exactly 20 accepted quads, whereas
> forward found 23... I wonder if the instructor may have coded something in
> that nature -- by whatever means -- and based the assignment on this (hmmm,
> pondering a recursive scheme to create the 1820 quads, and then unwinding
> the stack would mean starting with "mnop" as the first quad to be
> filtered/accepted... Though a recursion depth of 1820 sounds obscene to me)
>
>
>
> >{Now, do I want to attempt to code a string combinations
> generator/iterator
> >in REXX -- I'll need to study if it supports "static" data (previous value
> >retained between invocations) in procedures. Otherwise there may be some
> >ugly global data exposed; filterfalse generator/iterator isn't really
> >required as the filter predicate can be manually called}
>
>         Not that anyone cares -- using the Python documentation for
> itertools.combinations I did manage to code something in REXX similar to
> the generator (convoluted as no "yield" equivalent, nor StopIteration; and
> only one "generator" could be in use at a time due to how state was carried
> between calls... I'm not going to study an Object REXX text to see if I can
> create a class for the generator!).
>
>         It produces the same 23 quads as "forward" processing Python does,
> so
> at least the combination generator works for that case.
>
>
> --
>         Wulfraed                 Dennis Lee Bieber         AF6VN
>         wlfraed at ix.netcom.com
> http://wlfraed.microdiversity.freeddns.org/
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


-- 
Mayo Adams

287 Erwin Rd.
Chapel Hill, NC 27514
(919)-780-3917
mayoadams at gmail.com


More information about the Tutor mailing list