[Python-de] Denksportaufgabe: Beschraenktes Sortieren

René Liebscher R.Liebscher at gmx.de
Fri May 9 13:15:57 EDT 2003


Dinu Gherman schrieb:
> 
> Dinu Gherman:
> 

> ...

> Wer weiterknobeln will: finde eine Funktion group(seq, indices=[])
> mit aehnlichen Nebeneigenschaften wie bisher, die folgende SQL-
> Abfrage implementiert: "SELECT * FROM seq GROUP BY indices". Bei-
> spiel (jedenfalls erwarte ich, dass das in SQL so etwas macht ;-):
> 
> # -----------------------------------------------------
> class TestGroup(unittest.TestCase):
>      "Test group() function."
> 
>      def testGroup(self):
>          "Test group()."
> 
>          input = [[1, 1, 1, 2],
>                   [2, 0, 2, 3],
>                   [0, 1, 3, 0],
>                   [2, 0, 0, 1]]
>          exp = [[[1, 1, 1, 2]],
>                 [[2, 0, 2, 3],
>                  [2, 0, 0, 1]],
>                 [[0, 1, 3, 0]]]
>          result = group(input, [1, 0])
>          self.assert_(result == exp)
> # -----------------------------------------------------
> 
> Ich habe da eine Version, aber die sieht noch sehr gespenstisch aus!
> 
Wie wäre es mit folgender Version:


def group(sequence,indices=[]):
    keys = {}
    def f(seq,indices=indices,keys=keys):
        r = []
        keys.setdefault(tuple([seq[i] for i in indices]),r).append(seq)
        return r
    return filter(len,map(f,sequence))


MfG
René




More information about the Python-de mailing list