On 5 Jan 2005 17:05:40 -0500, [EMAIL PROTECTED] (Roy Smith) wrote: >I've got a silly little problem that I'm solving in C++, but I got to >thinking about how much easier it would be in Python. Here's the >problem: > >You've got a list of words (actually, they're found by searching a >data structure on the fly, but for now let's assume you've got them as >a list). You need to create a comma-delimited list of these words. >There might be duplicates in the original list, which you want to >eliminate in the final list. You don't care what order they're in, >except that there is a distinguised word which must come first if it >appears at all. > >Some examples ("foo" is the distinguised word): > >["foo"] => "foo" >["foo", "bar"] => "foo, bar" >["bar", "foo"] => "foo, bar" >["bar", "foo", "foo", "baz", "bar"] => "foo, bar, baz" or "foo, baz, bar" > >The best I've come up with is the following. Can anybody think of a >simplier way? > (Not tested beyond what you see ;-) python 2.4: >>> words = ["foo", "bar", "baz", "foo", "bar", "foo", "baz"] >>> w2 = list(t[1] for t in sorted((w!='foo', w) for w in set(words))) >>> w2 ['foo', 'bar', 'baz']
Gets you a sort in the bargain ;-) >-------------------- >words = ["foo", "bar", "baz", "foo", "bar", "foo", "baz"] > ># Eliminate the duplicates; probably use set() in Python 2.4 Yup, but 2.3 can be a one-liner too: >>> words = ["foo", "bar", "baz", "foo", "bar", "foo", "baz"] >>> w2 = ('foo' in words and ['foo'] or []) + [w for w in >>> dict(zip(words,words)) if w!='foo'] >>> w2 ['foo', 'baz', 'bar'] Not sorted, but foo is out front. >d = dict() >for w in words: > d[w] = w > >if d.has_key ("foo"): > newWords = ["foo"] > del (d["foo"]) >else: > newWords = [] > >for w in d.keys(): > newWords.append (w) > >s = ', '.join (newWords) >print s >-------------------- Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list