Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Summer reading list

Reply
Thread Tools

Summer reading list

 
 
Raymond Hettinger
Guest
Posts: n/a
 
      08-12-2003
Found in a pamphlet at a pre-school:
---------------------------------------
Reading improves vocabulary
Reading raises cultural literacy through shared knowledge
Reading develops writing skills
Reading opens the mind to new ways of understanding
Reading is fun


Accordingly, I suggest the following works of literature:

* heapq.py (255 lines)
* sets.py (536 lines)
* textwrap.py (355 lines)
* csv.py (427 lines)

These make enjoyable reading, cover interesting topics/algorithms,
demonstrate superb modern python technique, and showcase
effective use of Python's newer features.

Learn from the masters:
Pinard, O'Connor, Peters, Wilson, Martelli, van Rossum,
Ward, Montanaro, Altis, Drake, and others

have-you-read-any-good-code-lately-ly yours,


Raymond Hettinger


P.S. The unittests for sets.py are *not* as enjoyable reading; however,
they are a highly instructive example of Greg's sophisticated use of the
testing framework and his unusally thorough approach to deciding
what and how to test. Lib/test/test_sets.py (692 lines)
Learning from Greg's example enabled me to use similar ideas in
developing Lib/test/test_random.py (298 lines).


 
Reply With Quote
 
 
 
 
Joe Cheng
Guest
Posts: n/a
 
      08-12-2003
> Accordingly, I suggest the following works of literature:
>
> * heapq.py (255 lines)
> * sets.py (536 lines)
> * textwrap.py (355 lines)
> * csv.py (427 lines)
>
> These make enjoyable reading, cover interesting topics/algorithms,
> demonstrate superb modern python technique, and showcase
> effective use of Python's newer features.


I read heapq.py from here:
http://cvs.sourceforge.net/cgi-bin/v...ist/src/Lib/he
apq.py

Quoting from the comments:

"""Usage:

heap = [] # creates an empty heap
heappush(heap, item) # pushes a new item on the heap
item = heappop(heap) # pops the smallest item from the heap
item = heap[0] # smallest item on the heap without popping it
heapify(x) # transforms list into a heap, in-place, in linear time
item = heapreplace(heap, item) # pops and returns smallest item, and adds
# new item; the heap size is unchanged"""

It might just be my Java background creeping in (I'm a Python newbie), but,
wouldn't it be better if this was OO?

heap = Heap()
heap.push(item)
item = heap.pop()
item = heap[0]
heapified = Heap(x)
item = heap.replace(item)

Otherwise the user could easily break the heap by doing something dumb to
the list...



 
Reply With Quote
 
 
 
 
Chad Netzer
Guest
Posts: n/a
 
      08-12-2003
On Tue, 2003-08-12 at 08:56, Joe Cheng wrote:

> Quoting from the comments:
>
> """Usage:
>
> heap = [] # creates an empty heap
> heappush(heap, item) # pushes a new item on the heap
> item = heappop(heap) # pops the smallest item from the heap
> item = heap[0] # smallest item on the heap without popping it
> heapify(x) # transforms list into a heap, in-place, in linear time
> item = heapreplace(heap, item) # pops and returns smallest item, and adds
> # new item; the heap size is unchanged"""
>
> It might just be my Java background creeping in (I'm a Python newbie), but,
> wouldn't it be better if this was OO?
>
> heap = Heap()
> heap.push(item)
> item = heap.pop()
> item = heap[0]
> heapified = Heap(x)
> item = heap.replace(item)
>
> Otherwise the user could easily break the heap by doing something dumb to
> the list...


True. But the flexibility of using the builtin is also nice. For
example, you can add a bunch of objects to the list, then heapify once,
rather than having to call heap.push() a bunch of times (which may be
slower, because you need to maintain the heap property after you push
each new item.)

I think the idea is that, if you want a real Heap class, you can build
one very easily (see below). And if you don't need a heap class, you
can gain some benefits from this approach because it is exposing and
operating on lists directly.

This probably comes under "practicality beats purity". (See 'The Zen of
Python', or type "import this" into your Python interpreter)

Quick heap class (any error corrections are appreciated):
---------------------------------------------------------

import heapq

class Heap:
def __init__( self, heap=[] ):
heapq.heapify( heap )
self._heap = heap

def __getitem__( self, i ):
return self._heap[ i ]

def push( self, item ):
return heapq.heappush( self._heap, item )

def pop( self ):
return heapq.heappop( self._heap )

def replace( self, item ):
return heapq.heapreplace( self._heap, item )

if __name__ == '__main__':
# Tests
heap = Heap()
heap.push(3)
heap.push(2)
heap.push(1)
item = heap.pop()

assert item == 1

item = heap[0]
assert item == 2

item = heap.replace(4)
assert item == 2
assert heap[0] == 3
assert heap[1] == 4



--
Chad Netzer


 
Reply With Quote
 
Andrew Dalke
Guest
Posts: n/a
 
      08-12-2003
Chad Netzer
> Quick heap class (any error corrections are appreciated):
> ---------------------------------------------------------


> def __init__( self, heap=[] ):


make that
def __init__(self, heap = None):
if heap is None:
heap = []

Otherwise, all Heaps created with default args will share the
same data.

Andrew



 
Reply With Quote
 
Andrew Dalke
Guest
Posts: n/a
 
      08-13-2003
Joe Cheng:
> It might just be my Java background creeping in (I'm a Python newbie),

but,
> wouldn't it be better if this was OO?


Here's perhaps the definitive statement on the topic, from Tim Peters:
http://aspn.activestate.com/ASPN/Mai...on-dev/1620162

Summary: heapq is a concrete interface, not an abstract one. It doesn't
try to encompass the different ways to do heaps. It's like bisect in that
it works on an existing data type.

Andrew



 
Reply With Quote
 
John J. Lee
Guest
Posts: n/a
 
      08-13-2003
"Andrew Dalke" <> writes:

> Joe Cheng:
> > It might just be my Java background creeping in (I'm a Python newbie), but,
> > wouldn't it be better if this was OO?

>
> Here's perhaps the definitive statement on the topic, from Tim Peters:
> http://aspn.activestate.com/ASPN/Mai...on-dev/1620162
>
> Summary: heapq is a concrete interface, not an abstract one. It doesn't
> try to encompass the different ways to do heaps. It's like bisect in that
> it works on an existing data type.


That URL comes up blank for me. Found this, though:

http://www.python.org/dev/summary/20...003-04-30.html

| The idea of turning the heapq module into a class came up, and later
| led to the idea of having a more proper FIFO (First In, First Out)
| data structure. Both ideas were shot down. The reason for this was
| that the stdlib does not need to try to grow every single possible
| data structure in programming. Guido's design philosophy is to have a
| few very powerful data structures that other ones can be built off
| of. This is why the bisect and heapq modules just work on standard
| lists instead of defining a new class. Queue is an exception, but it
| is designed to mediate messages between threads instead of being a
| general implementation of a queue.


John
 
Reply With Quote
 
Fredrik Lundh
Guest
Posts: n/a
 
      08-13-2003
Andrew Dalke wrote:

> Summary: heapq is a concrete interface, not an abstract one. It doesn't
> try to encompass the different ways to do heaps. It's like bisect in that
> it works on an existing data type.


more importantly, it works on *any* existing data type, as long as the
type behaves like a mutable sequence.

</F>




 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
reading list of list to a file caroliina Python 0 12-09-2007 04:11 PM
Kamaelia & Summer of Code (was Re: Google's Summer of Code - Students coding on MoinMoin ) Michael Python 0 05-06-2006 10:27 AM
Summer of Code mailing list Neal Norwitz Python 0 04-28-2006 05:37 PM
New mailing list to discuss Google Summer of Code David Ascher Python 0 06-02-2005 05:35 PM
RE: Summer reading list Joe Cheng Python 3 08-16-2003 12:30 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57