On 14/08/18 09:11, Deepti K wrote:
>  when I pass ['bbb', 'ccc', 'axx', 'xzz', 'xaa'] as words to the below
> function, it picks up only 'xzz' and not 'xaa'

Correct because....

> def front_x(words):
>   # +++your code here+++
>   a = []
>   b = []
>   for z in words:
>     if z.startswith('x'):
>       words.remove(z)

You just changed the thing you are iterating over.
By removing an elem,ent the list got shorter so the
internal counter inside the for loop now points at
the next item - ie it skipped one.

As a general rule never modify the thing you are
iterating over with a for loop - use a copy or
change to a while loop instead.


>       b.append(z)
>       print 'z is', z
>   print 'original', sorted(words)

But it's not the original because you've removed
some items.

>   print 'new', sorted(b)
>   print sorted(b) + sorted(words)

But this should be the same as the original
(albeit almost sorted).

PS. Since you only modify 'b' and 'words' you
don't really need 'a'

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


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

Reply via email to