Seite 2 von 2

Verfasst: Freitag 30. Mai 2008, 16:47
von mazman
wie bekomme ich bei der funktion das return der werte hin? mir fehlt noch die area_jung (1078) und die area_alt (5524) und area_gross (12572)?

das print ist nicht so wichtig. ich brauche nur die werte als return.

Code: Alles auswählen

from itertools import groupby, imap
from operator import itemgetter

a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]

def datum_area(table):
    s = sorted((int(year), area) for area, year in table)
    
    data = {}
    for k, g in groupby(s, itemgetter(0)):
        data[k] = sum(imap(itemgetter(1), g))
    
    years = sorted(data.keys())
    max_area = sorted(data.iteritems(),
            key=lambda elem: (elem[1], elem[0])
            )[-1][0] # max and year
    
    for year, text in [
            (years[0], "earliest %d: %d"),
            (years[-1], "oldest %d: %d"),
            (max_area, "biggest area %d: %d")]:
        print text % (year, data[year])
    alt = years[0]
    #area_alt = ?
    gross =  years[1]
    #area_gross = ?
    jung = years[2]
    #area_jung = ?

    area_full = sum(data.itervalues())
    return area_full, alt, area_alt, gross, area_gross, jung, area_jung

Verfasst: Freitag 30. Mai 2008, 17:05
von audax

Code: Alles auswählen

from itertools import groupby, imap
from operator import itemgetter

a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]

def datum_area(table):
    s = sorted((int(year), area) for area, year in table)
    
    data = {}
    for k, g in groupby(s, itemgetter(0)):
        data[k] = sum(imap(itemgetter(1), g))
    
    years = sorted(data.keys())
    max_area = sorted(data.iteritems(),
            key=lambda elem: (elem[1], elem[0])
            )[-1][0] # max and year
    

    results = {}
    keys = "total earliest oldest biggest".split()
    t, e, o, b = keys
    for year, key in [
            (years[0], e),
            (years[-1], o),
            (max_area, b)]:
        results[key] =  (year, data[year])

    results[t] = sum(data.itervalues())
    return [results[k] for k in keys] 

print datum_area(a)
Ich will dir ja nicht zu nahe treten, aber...kannst du überhaupt Python?

€dit:
Oder so:

Code: Alles auswählen

from itertools import groupby, imap, izip
from operator import itemgetter

a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]

def datum_area(table):
    s = sorted((int(year), area) for area, year in table)
    
    data = {}
    for k, g in groupby(s, itemgetter(0)):
        data[k] = sum(imap(itemgetter(1), g))
    
    years = sorted(data.keys())
    max_area = sorted(data.iteritems(),
            key=lambda elem: (elem[1], elem[0])
            )[-1][0] # max and year
    

    results = {}
    keys = "total earliest oldest biggest".split()
    for year, key in izip(
            [ years[0], years[-1], max_area], 
            keys[1:]):
        results[key] =  (year, data[year])

    results[keys[0]] = sum(data.itervalues())
    return [results[k] for k in keys] 

print datum_area(a)

Verfasst: Freitag 30. Mai 2008, 17:24
von mazman
bin voll der anfänger...

trotzdem danke nochmal