Listen in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fosler
User
Beiträge: 2
Registriert: Montag 3. Februar 2014, 12:38

Hey liebe Community,
ich brauche eure Hilfe dringend, da ich bei folgender Aufgabe nicht weiterkomme.

Ziel ist die Listen, die mit Listenwerten (2,3) beginnen erstmal auszuwählen und danach
soll das arithmetische Mittel des dritten Wertes jeweils gebildet werden.
Beim letzten Listenwert sollen nur die Zahlen addiert werden.
Im folgenden Beispiel würden erstmal die Listen [2,3,1,4], [2,3,3,3], [2,3,4,6] ausgewählt werden.
Das arithmetische Mittel ergibt sich aus (1+3+4)/3. = 8/3
Zum Schluss noch die Addition der Zahlen: 4+3+6 = 13
Mein erstellter Source Code lautet :

Code: Alles auswählen

a = []
c = []
kanten = [[2,3,1,4],[2,4,3,3],[3,5,3,4],[1,4,5,2],[2,3,3,3],[3,5,1,2],[2,3,4,6]]
d = [[k,l] for k in range(1,9) for l in range(1,9) if k !=l]
# alle theoretisch moeglichen Kanten von den Knoten 1 bis 8
for i in kanten:
    a.append(i[0:2])
print a
g = 0
for z in d:
    if z in a:
        g += 1
       
       
#print g

Es wäre super, wenn Ihr mir weiterhelfen könntet.
Vielen Dank
Viele Grüße
fosler
Zuletzt geändert von Anonymous am Montag 3. Februar 2014, 12:59, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Du könntest erst einmal die gewünschten Daten filtern um nur darauf zu operieren. Danach wird es simpel.

Code: Alles auswählen

edges = [[2, 3, 1, 4], [2, 4, 3, 3], [3, 5, 3, 4], [1, 4, 5, 2], [2, 3, 3, 3],
         [3, 5, 1, 2], [2, 3, 4, 6]]


def get_filtered_edges(data, compare_value):
    return [element for element in data if element[:2] == compare_value]

edges_selected = get_filtered_edges(edges, [2, 3])

total = sum(element[2] for element in edges_selected)
print('{} / {} = {}'.format(total, len(edges_selected), total / len(edges_selected)))
Ergänzung: Wenn man mit Python 2 arbeitet findet eine reine Integer-Division statt. In dem Fall sollte man für total ein Typecast auf float durchführen. Alternativ hilft auch ein "from __future__ import division" am Anfang des Moduls, allerdings muss man sich klar machen, dass damit dann alle Integer-Divisionen im Modul betroffen sind.
Zuletzt geändert von /me am Montag 3. Februar 2014, 13:44, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

In [6]: kanten = [[2,3,1,4],[2,4,3,3],[3,5,3,4],[1,4,5,2],[2,3,3,3],[3,5,1,2],[2,3,4,6]]

In [7]: auswahl = [k for k in kanten if k[0] == 2 and k[1] == 3]

In [8]: auswahl
Out[8]: [[2, 3, 1, 4], [2, 3, 3, 3], [2, 3, 4, 6]]

In [9]: sum(a[2] for a in auswahl) / float(len(auswahl))
Out[9]: 2.6666666666666665

In [10]: 8 / 3.
Out[10]: 2.6666666666666665

In [11]: sum(a[3] for a in auswahl)
Out[11]: 13
Die "In"- und "Out"-Dinger sind Ausgaben der Shell. Die gehören nicht zum Code.
fosler
User
Beiträge: 2
Registriert: Montag 3. Februar 2014, 12:38

Vielen Dank euch!!! :D
Antworten