Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

generating all combinations of nested tuples in python [closed]

Tags:

python

Here is a short but complete program in Berkeley Logo:

to choices :menu [:sofar []]
if emptyp :menu [print :sofar stop]
foreach first :menu [(choices butfirst :menu sentence :sofar ?)]
end

And here's how you use it. You type

choices [[small medium large]
         [vanilla [ultra chocolate] lychee [rum raisin] ginger]
         [cone cup]]

and Logo replies

    small vanilla cone
    small vanilla cup
    small ultra chocolate cone
    small ultra chocolate cup
    small lychee cone
    small lychee cup
    small rum raisin cone
    small rum raisin cup
    small ginger cone
    small ginger cup
    medium vanilla cone
    medium vanilla cup
    medium ultra chocolate cone
    medium ultra chocolate cup
    medium lychee cone
    medium lychee cup
    medium rum raisin cone
    medium rum raisin cup
    medium ginger cone
    medium ginger cup
    large vanilla cone
    large vanilla cup
    large ultra chocolate cone
    large ultra chocolate cup
    large lychee cone
    large lychee cup
    large rum raisin cone
    large rum raisin cup
    large ginger cone
    large ginger cup

Source: http://www.eecs.berkeley.edu/~bh/logo-sample.html

How would you do that in python?

like image 840
user2502193 Avatar asked Nov 21 '25 10:11

user2502193


1 Answers

As usual, the itertools module offers a solution:

>>> choices = [["small", "medium", "large"],
...            ["vanilla", "ultra chocolate", "lychee", "rum raisin", "ginger"],
...            ["cone", "cup"]]
>>> from itertools import product
>>> print("\n".join(" ".join(item) for item in product(*choices)))
small vanilla cone
small vanilla cup
small ultra chocolate cone
small ultra chocolate cup
small lychee cone
small lychee cup
small rum raisin cone
small rum raisin cup
small ginger cone
small ginger cup
medium vanilla cone
<etc...>
like image 53
Tim Pietzcker Avatar answered Nov 22 '25 23:11

Tim Pietzcker