Alan Gauld wrote:

"Alex Hall" <mehg...@gmail.com> wrote

Alright, I have it working. Now the problem is that it does not throw
out reversals. I tried to do this myself with a couple loops, but I
get index errors. My total list of permutations is called l.

for i in range(0, len(l)):
r=l[i]; r.reverse()

You don''t need to specify the 0, its the default.
But you don't need to use indexing either.

for r,i in enumerate(l): r.reverse()

for j in range(0, len(l)):
 print l[j], r, i, j

Here you are comparing the reversed item to every item in the
list, including the ones you have already reversed, including the
item itself. So you will always find a match when i==j...

Using the in operator and list slicing would be easier

if r in l[i:]: l.remove(r)

but...

 if r==l[j]: l.remove(r)

Its never a good idea to remove items from a list you are iterating
over, its like the old cartoon of the guy cutting down the tree branch
he is sitting on.

You can cut off the branch you're sitting on so long as you remember to cut on the correct side :)

Back in Ancient Days when dinosaurs walked the earth, and I programmed in Pascal, computers didn't have much memory, and were slow. Consequently it wasn't practical to make a copy of a list if you wanted to delete a few items. The only practical way to modify lists was to modify them in place, and if you needed to delete items, you had to work backwards. It took me a while to break myself of the habit of doing this:

for i in range(len(mylist)-1, -1, -1):
    if mylist[i] == "something":
         del mylist[i]

(Note that you only need to work backwards if you're *deleting* entries, not if you replace them with something else.)

This is still a useful technique to have in your toolbox, but generally speaking the above is better written as:

mylist = [x for x in mylist if x != "something"]


If you really need to modify the list in place, and not just re-bind the name "mylist" to the new list, then one tiny change will do it:

mylist[:] = [x for x in mylist if x != "something"]



--
Steven

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

Reply via email to