[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