# [Tutor] problem solving with lists

Dennis Lee Bieber wlfraed at ix.netcom.com
Fri Mar 25 09:27:12 EDT 2022

```On Fri, 25 Mar 2022 16:56:06 +1300, dn <PythonList at DancesWithMice.info>
declaimed the following:

>Further, if we consider that arranging players into a logical order,
>before selection, is also a likely and 'natural' approach; this would
>seem to imply that every time they enter a tournament, 'a' and 'b' will
>play each other in the first game. That may not be a good thing! (may
>not even be seen as "fair" - by those who don't think in statistics)
>
>Accordingly, I'm wondering how 'expensive' it would be to 'throw' all
>the player's names into a 'pool' and make repeated random drawings to
>form the groupings? Each such selection, will either be 'accepted' if
>the player may be added to the group currently being constructed, or
>'rejecting' if the player is not suitable/permitted to be added (and
>returning to the 'pool').
>

Since "a", "b", etc. are just placeholders, and -- if all tournaments
are based upon the same criteria (4 groups of 4 players for 5 weeks) such
that the "table of placeholders" doesn't change (it becomes a constant in
the code that translates from placeholder to player name) -- all that is
required is to randomize the list of 16 players before mapping them to the
placeholder letters.

"""
random.shuffle(x[, random])

Shuffle the sequence x in place.

<SNIP>

To shuffle an immutable sequence and return a new shuffled list, use
"""
"""
random.sample(population, k)

Return a k length list of unique elements chosen from the population
sequence or set. Used for random sampling without replacement.

Returns a new list containing elements from the population while leaving
the original population unchanged. The resulting list is in selection order
so that all sub-slices will also be valid random samples. This allows
raffle winners (the sample) to be partitioned into grand prize and second
place winners (the subslices).
"""

players = [	"Lady Gaga", "Arnold Palmer", ..., "George Bush"	]

random.shuffle(players)

lookup = {}
for i, placeholder in enumerate("abcdefghijklmnop"):
lookup[placeholder] = players[i]

Alternatively, untested:

players = [	"Lady Gaga", "Arnold Palmer", ..., "George Bush"	]

random.shuffle(players)

lookup = {}
for placeholder, player in zip("abcdefghijklmnop", players):
lookup[placeholder] = player

Final output would look something like (pseudo-code)

for w, week in enumerate(weeks)::
print("Week %s" % w+1)
for t, team in enumerate(week):
print("\tTeam %s" % t+1)
for player in team:
print("\t\t%s" % players[player])

--
Wulfraed                 Dennis Lee Bieber         AF6VN
wlfraed at ix.netcom.com    http://wlfraed.microdiversity.freeddns.org/

```