[Tutor] Graphing the random.gauss distribution

Kent Johnson kent37 at tds.net
Tue Aug 14 19:28:34 CEST 2007


Dick Moores wrote:
> At 06:47 AM 8/14/2007, Kent Johnson wrote:
>> This could be a list comprehension:
>> d = [ [k, 0] for k in range(200) ]
> 
> So you recommend using list comprehensions wherever possible? (I sure 
> wouldn't have thought of that one..)

Not "whenever possible", no, but I find simple list comps (I count this 
one as simple) to be far more readable than the equivalent loop. Not 
only are they shorter but they read the way I think.

If the list comp can't be easily written on one line, or has a complex 
condition, or has two for clauses, I find it less appealing and may 
write it as a for loop. I never use a list comp just for the 
side-effects; only when I actually want the list.

> I prefer the index (or integer) to come after the bar ends, and before 
> the count. One reason is that if the index is at the base of the bar, at 
> 100 and above, the bars get pushed out one character longer than they 
> should be relative to the 99 or less bars. I suppose there's a way to 
> handle this, but I couldn't think of it then (but see below).

Use string formatting or str.rjust():
In [1]: '%3d' % 10
Out[1]: ' 10'
In [2]: '%3d' % 100
Out[2]: '100'
In [4]: str(10).rjust(3)
Out[4]: ' 10'

> This would solve the problem I mentioned above caused by putting the 
> indices at the bases of the bars:
> 
> for i, count in enumerate(d):
>     barLength = count//barLengthAdjuster
>     if i < 100:
>         print "%d  %s %d" % (i, '*' * barLength, count) # there are 2 
> spaces between %d and %s
>     else:
>         print "%d %s %d" % (i, '*' * barLength, count)

Ouch. See above.

Kent


More information about the Tutor mailing list