On Thu, 15 Sep 2005, Reem Mohammed wrote: > Suppose we have data file like this one (Consider all lines as strings ) > > 1 2 3 3 4 4 4 4 5 6 > 2 2 2 5 5 5 6 > 3 2 1 1 1 3 3 3 4 6 > > I would like to remove line if its belong to another one, and will be > able to do this if longer line come after a short one.
when you say "belong to another one", do you mean "is a substring of another one"? so 4 5 6 would belong to 1 2 3 4 5 6 7 8? if so, what you're asking for is the set of upper bounds of a partially ordered set. i often find that i need to compute things like this; i haven't figured out a way to do it any faster than the obvious: def upperbounds(set, order): """Finds the upper bounds of a set under a partial order. Set is an iterable (which may contain duplicates - it doesn't actually need to be a set), and order is a function of two arguments such that order(a, b) returns True if a is greater than b, and False otherwise. """ bounds = [] # this would be better as a set, really for item in set: for bound in bounds: if (order(bound, item)): break if (order(item, bound)): bounds.remove(bound) else: bounds.append(item) return bounds you could use this as follows: lines = map(str.strip, inputfile.readlines()) print upperbounds(lines, str.__contains__) tom -- I content myself with the Speculative part [...], I care not for the Practick. I seldom bring any thing to use, 'tis not my way. Knowledge is my ultimate end. -- Sir Nicholas Gimcrack -- http://mail.python.org/mailman/listinfo/python-list