Steven D'Aprano wrote: > Bryan Olson wrote: >>Christoph Zwerschke wrote: >>[...] >> >>>That may be the main problem to decide whether the cartesian product >>>should return a generator or a list. >> >>The Cartesion product is a set. > > And the generalization of mathematical sets in Python can be built-in > sets, lists or tuples, depending on what you need. > > Given that cartesian products tend to be *extremely* large, some sort of > iterator is the only practical solution -- even if that's not > mathematically pure.
Query languages have included Cartesian product for decades. Their solution is to optimize expressions to avoid building, or even iterating over, big Cartesian products. >>[...] >> >>>That's the other problem. The uses cases (like the password cracker >>>example) are very limited and in these cases you can either write nested >>>loops or write your own cartesian product. >> >>Cartesian product is one of the essential operations of >>relational algebra; in that context it's widely useful. >>By itself, it's usually not what one wants. > > Google on "Cartesian product python" and you will find thousands of hits. > This is something that keeps coming up over and over again. It keeps coming up in exercises and examples. How many of your Google results note an application that actually calls for a Cartesian product enumerator? I wrote one an old thread, and so far I've written it one more time than I've used it. -- --Bryan -- http://mail.python.org/mailman/listinfo/python-list