Vincent Gulinao said unto the world upon 2005-10-24 09:29:
> I have a list of lists of constant width (2 rows). I need to:
> 1. delete sub-lists with None element
> 2. sort it by any sub-list index
>
> say: [ ['c','d'], ['g',None], ['a','b',], ['e','f']
> if sorted using 2nd index: [ ['a','b'], ['c','d'], ['e','f'] ] (same result
> for 1st index for this example)
>
> TIA.
Hi Vincent,
I'm no guru, so watch this space for better suggestions ;-)
I changed your example to one where the sort order is different for
sort by the first and second items of the nested lists.
I'd use a list comprehension to remove the items with a None value:
>>> orig_list = [ ['c','b'], ['g',None], ['a','g',], ['e','f'], ['d',
None]]
>>> noneless = [[x, y] for [x, y] in orig_list if not (x is None or y
is None)]
>>> noneless
[['c', 'b'], ['a', 'g'], ['e', 'f']]
Or:
>>> noneless = [[x, y] for [x, y] in orig_list if not None in [x, y]]
>>> noneless
[['c', 'b'], ['a', 'g'], ['e', 'f']]
To sort by the second item, try
>>> def sort_by_second(sequence):
decorated = [(x[1], x) for x in sequence]
decorated.sort()
return [x[1] for x in decorated]
(google for DSU, Decorate Sort Undecorate for more info)
>>> sort_by_second(noneless)
[['c', 'b'], ['e', 'f'], ['a', 'g']]
HTH. There's no explanation here (I'm feeling lazy); post again if you
need some help sorting this out.
Best,
Brian vdB
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor