list comparison help?

7stud bbxx789_05ss at yahoo.com
Sat Apr 14 06:22:55 EDT 2007


On Apr 14, 3:36 am, "Dropkick Punt" <notrealaddr... at all.com> wrote:
> Hi. I have a list of common prefixes:
>
> >>> prefixes = [ "the", "this", "that", "da", "d", "is", "are", "r", "you", "u"]
>
> And I have a string, that I split() into a list.
>
> >>> sentence = "what the blazes is this"
> >>> sentence = sentence.split()
>
> Now I want to strip the sentence of all words in the prefix list.
>
> I tried this method:
>
> >>> for x in prefixes:
>
> ...       if sentence.index(x):
> ...             del sentence[sentence.index(x)]
>
> This raises, the error:
>
> Traceback (most recent call last):
>   File "<stdin>", line 3, in ?
> ValueError: list.index(x): x not in list
>
> This puzzles me, because if x isn't in the list, the subroutine shouldn't attempt to delete it
> from the list, so I'm not sure why it's complaining.
>
> Can anybody explain this to me, &/or show me a better way to do it?

Add some print statements to help you figure out what is going on:

for x in prefixes:
    print x
    a = sentence.index(x)
    print "index: " + str(a)
    if a:
        del sentence[sentence.index(x)]

The problem is: to evaluate the if statement, python executes
sentence.index(x) and the return value of that is examined to see if
it is True or False.  However sentence.index(x) throws an exception
when the word x is not found in sentence, and therefore your program
terminates before the if statement ever completes its evaluation.

So you need to use something in your if condition that won't throw an
exeception, i.e. something that returns only true or false, like:

for prefix in prefixes:
    while prefix in sentence:   #remove only removes the first
occurrence
       sentence.remove(prefix)


Here is a better way:

prefixes = [ "the", "this", "that", "da", "d", "is", "are", "r",
"you", "u"]
sentence = "what the blazes is the da this da this the"
sentence = sentence.split()

result = [word for word in sentence if word not in prefixes]
print result





More information about the Python-list mailing list