On 18/08/14 00:48, Terry--gmail wrote:

Sorry about the HTML. I think I have it turned off now in Thunderbirdy
for this address. If so, then what follows should not be flat. If it is
flat, please tell me.

Still flat for me... Sorry.


The fact is, I am VERY interested in acquiring that 'Pythonic' view you
mention and I have encountered that term bandied about on the Internet,
but have come away confused as to exactly what Pythonic Thinking really
is! The writers seem to take it for granted I know. I don't.

It just means using the "normal" Python idioms - and they are learned by reading other Python code. Gradually it permeats your brain and seems second nature.

There are a few guidelines published but mostly its just local style.

But I am now very curious to see how this same coding would be
accomplished in a Pythonic Way, so, letting the statement you gave me
redefine the entire flow of thought in that area of code--

catalog2 = [
["Drives", "Type", "Price", "Max Speed", "Energy Drain", "Rq-Crew", "",
"", ""],
["Drives", "Solar Sail", "3", "1", "None", "2", "", "", ""],
["Drives", "Bussard Ramjet", "10", "7", "2", "3", "", "", ""],
["Drives", "Fusion", "70", "15", "5", "8", "", "", ""],
["Drives", "Matter-Antimatter", "1500", "145", "15", "13", "", "", ""],
["Drives", "Warp Drive", "2500", "250", "45", "17", "", "", ""],
]


We want to find the maximum size for each column--

lens = [0] * len(catalog2[0])

for line_number, row in enumerate(catalog2):
for col, item in enumerate(row):
if lens[col] < len(item):
lens[col] = len(item)

You don't need the enumerate() for the first loop
since you aren't using the index.

for row in catalog2[1:]:   # miss the header row
    for col,item in enumerate(row):
        if lens[col] < len(item):
           lens[col] = len(item)

Another way to do it would be to store a list of
lengths for each field then get the max of each list,
like this:

lens = [] * len(catalog2[0])
for row in catalog2[1:]:   # miss the first row
    for col,item in row:
       lens[col].append(len(item))

lens = [max(col) for col in lens]

I suspect the first one is quicker but without timing them
I'm not sure.

I'm also not sure which I'd consider most Pythonic...

Do we anticipate an execution speed increase doing it this way also?

Sometimes, but its also usually more reliable - less chance of
dropping off the end of a row or missing one out.

Or have we altered the way we think to fit a Pythonic Way of structuring
that will help us with other portions of the language???

yes a bit of that.
More thinking about the intent - to process all items - than about the how of the implementation - counting indexes up to the length.

pattern of it become more easily readable at a glance after we have
gotten used to it?)

That too, and also for other Python programmers.


--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to