Thanks all. This is very helpful. I am new to Python :)

Sent from my iPhone

> On 15 Aug 2018, at 8:16 am, Peter Otten <__pete...@web.de> wrote:
> 
> Alan Gauld via Tutor wrote:
> 
>>> 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'
> 
> For a simple solution you do need a and b: leave words unchanged, append 
> words starting with "x" to a and words not starting with "x" to b.
> 
> Someone familiar with Python might do it with a sort key instead:
> 
>>>> sorted(['bbb', 'ccc', 'axx', 'xzz', 'xaa'],
> ... key=lambda s: not s.startswith("x"))
> ['xzz', 'xaa', 'bbb', 'ccc', 'axx']
> 
> If you want ['xaa', 'xzz', 'axx', 'bbb', 'ccc'] as the result
> you can achieve that by sorting twice (Python's sorting is "stable") or by 
> tweaking the key function.
> 
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to