One of the advantages of using itertools is that it is written in C rather than Python (at least for CPython) and thus should run significantly faster than a pure Python implementation.
Chris On Mon, Sep 20, 2010 at 4:21 PM, Dave Angel <da...@ieee.org> wrote: > On 2:59 PM, Seth Leija wrote: > >> I need to know how to generate a list of combinations/permutations >> (can't remember which it is). Say I have a list of variables: >> >> [a,b,c,d,...,x,y,z] >> >> I am curious if there is an optimized way to generate this: >> >> [[a,b],[a,c],[a,d],...,[x,z],[y,z]] >> >> I currently have an iteration that does this: >> >> #list.py >> >> from math import * >> >> list1=['a','b','c','d','e'] >> list2=[] >> length=len(list1) >> >> for it1 in range(0 ,length): >> for it2 in range(it1+1, length): >> list2.append([list1[it1],list1[it2]]) >> >> print list2 >> >> However, this is one of the slowest parts of my function (beaten only >> by variable instantiation). I posted this on another forum looking to >> see if there was a different method completely. They said that my >> method was about as simple as it could get, but I might be able to >> find out how to optimize my code here. >> >> Thanks in advance. >> >> You're apparently looking for combinations. You're asking for all the > combinations of items from the original list, taken two at a time. > > Permutations would also include the reverse of each item, so it would be > exactly twice the size. > > For the specific case of two, your approach is about as simple as it can > get. However, generalizing the code to handle 'r' at a time is pretty > tricky. There's a library function for it in Python 2.6 and later, as > mentioned by others, and the docs show a sample implementation. > > Clearly making a single function call is optimized in one sense. However, > if you're looking for speed, chances are you could improve on your own > function by changing the two loops. (tested in python 2.6) > > Consider: > > > list1=['a','b','c','d','e'] > list2=[] > > for it1, val1 in enumerate(list1): > for val2 in list1[it1+1:]: > list2.append([val1, val2]) > > print list2 > > > DaveA > > > > > > > > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list