"Sander Sweers" <sander.swe...@gmail.com> wrote
mylist = ['John', 'Canada', 25, 32, 'right']
a = [item.upper() for item in mylist if type(item) == type('good')]
Usually it is recommended to use hasattr() instead of type()
hasattr(s, 'upper')
Nope, they do completely different things
I think you might be thinking of isinstance() which can be
used instead of type(). I see you use hasattr as a means of
testing for a method but that is still different from testing
type - the method names might be the same but the
functions be completely different in effect!
returned this: ['JOHN', 'CANADA', 'RIGHT']
I was expecting this: ['JOHN', 'CANADA', 25, 32, 'RIGHT']
So, actually the "if" acted like a filter.
It is intended to be used as a filter.
In order to use a list comprehension I created this function instead.
def upperfy(item)
try:
item = item.upper()
except AttributeError:
pass
return item
I would move return item under the except and remove the pass, other
might disagree on this.
I would :-)
Doing that would result in None being returned for each successful
conversion. The OPs code is correct (even if unnecessary)
a = [upperfy(item) for item in mylist]
a = [item.upper() if type(item) == str else item for item in mylist]
should do it I think.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor