Re: Good Python style?
- From: Steven D'Aprano <steve@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Thu, 31 May 2007 20:19:28 +1000
On Thu, 31 May 2007 09:59:07 +0200, Andreas Beyer wrote:
Hi,
I found the following quite cryptic code, which basically reads the
first column of some_file into a set.
In Python I am used to seeing much more verbose/explicit code. However,
the example below _may_ actually be faster than the usual "for line in ..."
Do you consider this code good Python style? Or would you recommend to
refrain from such complex single-line code??
Thanks!
Andreas
inp = resource(some_file)
# read first entries of all non-empty lines into a set
some_set = frozenset([line.split()[0] for line in \
filter(None, [ln.strip() for ln in inp])])
It's a little complex, but not excessively so. Any more, and it would
probably be too complex.
It would probably be easier to read with more readable names and a few
comments:
some_set = frozenset(
# ... from a list comp of the first word in each line
[line.split()[0] for line in
# ... each line has leading and trailing white space
# filtered out, and blanks are skipped
filter(None, # strip whitespace and filter out blank lines
[line.strip() for line in input_lines]
)])
Splitting it into multiple lines is self-documenting:
blankless_lines = filter(None, [line.strip() for line in input_lines])
first_words = [line.split()[0] for line in blankless_words]
some_set = frozenset(first_words)
As for which is faster, I doubt that there will be much difference, but I
expect the first version will be a smidgen fastest. However, I'm too lazy
to time it myself, so I'll just point you at the timeit module.
--
Steven.
.
- Follow-Ups:
- Re: Good Python style?
- From: Michael Hoffman
- Re: Good Python style?
- References:
- Good Python style?
- From: Andreas Beyer
- Good Python style?
- Prev by Date: non standard path characters
- Next by Date: Re: Good Python style?
- Previous by thread: Good Python style?
- Next by thread: Re: Good Python style?
- Index(es):
Relevant Pages
|