![]() |
Best way to do this? List loop (matrix?) iteration
Hi!
I might be missing the obvious, or I may have found something more complicated than the VBA I am used to. Could it be I need to use a maths library? For a given list of k items I'd like to turn it into an k*k matrix of item pairs. List_sample = ['a', 'b', 'c'] Output: aa ab ac ba bb bc ca cb cc I'd like to have 2 hooks into this process 1. I want the opportunity to use a value pair each time they are generated (because I need to send these to an api and get a number back to put into a temporary list or dictionary - still tbd). 2. I'd also like to know each time a row is completed so I can bank that temporary list to a database table. Else build one big list and do it at the end, I'm still figuring this out. #Code I've tried: stn_count = len(stn_list_short) for rowcount in range (0, stn_count): for colcount in range (0, stn_count): print stn_list_long[rowcount] stn_list_long[colcount] I've found itertools, tee, and product and felt I was getting warmer. I'm still looking, but any pointers would be appreciated! Thanks, Andy |
Re: Best way to do this? List loop (matrix?) iteration
On Tue 08 Jan 2013 07:19:59 PM EST, andydtaylor@gmail.com wrote:
> Hi! > > I might be missing the obvious, or I may have found something more complicated than the VBA I am used to. Could it be I need to use a maths library? > > For a given list of k items I'd like to turn it into an k*k matrix of item pairs. > > List_sample = ['a', 'b', 'c'] > > Output: > > aa ab ac > ba bb bc > ca cb cc > > I'd like to have 2 hooks into this process > 1. I want the opportunity to use a value pair each time they are generated (because I need to send these to an api and get a number back to put into a temporary list or dictionary - still tbd). > 2. I'd also like to know each time a row is completed so I can bank that temporary list to a database table. Else build one big list and do it at the end, I'm still figuring this out. > > #Code I've tried: > > stn_count = len(stn_list_short) > for rowcount in range (0, stn_count): > for colcount in range (0, stn_count): > print stn_list_long[rowcount] stn_list_long[colcount] > > I've found itertools, tee, and product and felt I was getting warmer. I'm still looking, but any pointers would be appreciated! > > Thanks, > > Andy > > You can use itertools.product("abc", repeat=2) together with itertools recipe grouper() from the same page: http://docs.python.org/3.3/library/i...ools#itertools HTH, -m -- Lark's Tongue Guide to Python: http://lightbird.net/larks/ |
Re: Best way to do this? List loop (matrix?) iteration
On Wed, Jan 9, 2013 at 11:19 AM, <andydtaylor@gmail.com> wrote:
> stn_count = len(stn_list_short) > for rowcount in range (0, stn_count): > for colcount in range (0, stn_count): > print stn_list_long[rowcount] stn_list_long[colcount] First off, you can iterate over the list directly: for row in stn_list_short: for col in stn_list_short: print row + col (I'm not sure what your code was doing with the print line, because it ought to have failed. Explicit concatenation will work.) Secondly, you can make a list of all of those pairs with a compact notation called a comprehension: pairs = [row + col for row in stn_list_short for col in stn_list_short] That covers your requirement #2, giving you a full list of all of them. How big is k going to be? Storing the whole list in memory will get a little awkward if you have very large k; on this system, I started seeing performance issues with a thousand elements in the list, but you could probably go to ten thousand (ie a hundred million pairs) if you have a decent bit of RAM. ChrisA |
Re: Best way to do this? List loop (matrix?) iteration
Thanks for your help - this is what I did - though it's probably obvious to most people reading this.
for rowcount in range (0, stn_count): row_durations.append(stn_list_short[rowcount]) for colcount in range (0, stn_count): # 3. Determine Station pairs for API query query_origin_stop = stn_list_long[rowcount] query_destination_stop = stn_list_long[colcount] # 4. Paths for determining duration. "station x = station x" has journey time 0 # 4a. Stations are SAME .....etc. and this part works! I am now stuck on something else though, but I'll start a new topic for that. Thanks Andy |
Re: Best way to do this? List loop (matrix?) iteration
Thanks for your help - this is what I did - though it's probably obvious to most people reading this.
for rowcount in range (0, stn_count): row_durations.append(stn_list_short[rowcount]) for colcount in range (0, stn_count): # 3. Determine Station pairs for API query query_origin_stop = stn_list_long[rowcount] query_destination_stop = stn_list_long[colcount] # 4. Paths for determining duration. "station x = station x" has journey time 0 # 4a. Stations are SAME .....etc. and this part works! I am now stuck on something else though, but I'll start a new topic for that. Thanks Andy |
Re: Best way to do this? List loop (matrix?) iteration
On 01/09/2013 06:24 PM, andydtaylor@gmail.com wrote:
> Thanks for your help - this is what I did - though it's probably obvious to most people reading this. > > for rowcount in range (0, stn_count): > row_durations.append(stn_list_short[rowcount]) > for colcount in range (0, stn_count): > # 3. Determine Station pairs for API query > query_origin_stop = stn_list_long[rowcount] > query_destination_stop = stn_list_long[colcount] > # 4. Paths for determining duration. "station x = station x" has journey time 0 > # 4a. Stations are SAME > Please reread Chris Angelico's message. Iterating over the lists themselves, instead of making a range, is shorter, easier to read, and usually quicker. > ....etc. and this part works! I am now stuck on something else though, but I'll start a new topic for that. > > Thanks > > Andy Untested: for rowshort, query_origin_stop in zip(stn_list_short, stn_list_long): row_durations.append(rowshort) for query_destination_stop in stn_list_long: #4 . Determine ... -- DaveA |
| All times are GMT. The time now is 09:33 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.