Hallo miteinander
Ich habe ein generator-object (<generator object shift at 0xb770aa7c>), das ich gerne anzeigen (ausprinten) möchte. Wie macht man das?
(Ich habe eine starmap benutzt: "(sorted((starmap(shift, verfueg.items())), key=by_weight, reverse=True))")
Vielen Dank,
Marcel
generator object
Einfach mit einer for-Schleife über jedes Element gehen:
oder kurz:
Code: Alles auswählen
for elem in gen:
print elem
Code: Alles auswählen
print list(gen)
Das Leben ist wie ein Tennisball.
Hm..so ganz klappt das noch nicht.
Im Moment habe ich sowas:
Und mit deiner Methode erhalte ich immernoch sowas: "<generator object shift at 0xb77deaa4>"
Im Moment habe ich sowas:
Code: Alles auswählen
result = (sorted((starmap(shift, verfueg.items())), key=by_weight, reverse=True))
if result:
shifts = result[0]
if all(preference for choice, pair in shifts for name, preference in pair):
print 'solution found:.'
else:
print 'best solution is:'
print
pprint.pprint(shifts)
else:
print 'no way.'
Was heißt denn "klappt noch nicht"? Als Fehlerbeschreibung ist das ein wenig knapp.
Lass mich raten: "shifts" ist eine Liste mit Generatoren? Das würde erklären warum pprint eine falsche Ausgabe macht. Zweite Vermutung: Du hast meine Lösung so umgesetzt:
du iterierst über die Liste und nicht die Generatoren.
Um an das Maximum einer Liste zu kommen muss man diese übrigens nicht vollständig sortieren. Es gibt da so eine max-Funktion
Lass mich raten: "shifts" ist eine Liste mit Generatoren? Das würde erklären warum pprint eine falsche Ausgabe macht. Zweite Vermutung: Du hast meine Lösung so umgesetzt:
Code: Alles auswählen
for shift in shifts:
print shift
Um an das Maximum einer Liste zu kommen muss man diese übrigens nicht vollständig sortieren. Es gibt da so eine max-Funktion
Das Leben ist wie ein Tennisball.
Du hast Recht, die Fehlerbeschreibung ist zu knapp. Daher hier ausführlicher:
Ich habe momentan folgender Code:
Der Code sollte eine Lösung zurückgeben, bei der angegeben wird, wer (hans, lea, sonja) welches Trinken bekommt. Der Vorrat an Trinken habe ich als Beispiel schon eingefügt, genau so die Präferenzen der Personen.
Im Grunde funktioniert der Code, wenn ich dann nicht ein "<generator object shift at 0xb775b57c>" zurück bekäme...
Danke für die Hilfe!
Ich habe momentan folgender Code:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import pprint
from collections import defaultdict
from itertools import product, starmap, permutations
data = defaultdict(list)
choices = 'eistee cola mineral sinalco'.split()
names = 'hans lea sonja'.split()
verfueg = {'eistee':2, 'cola':3, 'mineral':2, 'sinalco':1}
# Präferenzen: 1 für erste präferenz, 2 für zweite präferenz
data['eistee', 'hans'] = 1
data['cola', 'hans'] = 2
data['eistee', 'lea'] = 1
data['mineral', 'lea'] = 2
data['cola', 'sonja'] = 1
data['mineral', 'sonja'] = 2
def shift(choice, size):
for pair in permutations(names, size):
yield choice, frozenset((name, data.get((choice, name), 0)) for name in pair)
def generatePair():
for sorte in verfueg:
yield verfueg[sorte]
def output():
result = (sorted((starmap(shift, verfueg.items())), reverse=True))
if result:
shifts = result[0]
if all(preference for choice, pair in shifts for name, preference in pair):
print 'Solution found.'
else:
print 'No solution for all preferences found.'
print 'Best solution is:'
print
pprint.pprint(shifts)
else:
print 'No solution found.'
if __name__ == "__main__":
generatePair()
output()
Im Grunde funktioniert der Code, wenn ich dann nicht ein "<generator object shift at 0xb775b57c>" zurück bekäme...
Danke für die Hilfe!
Zuletzt geändert von MarcelF6 am Sonntag 11. November 2012, 15:37, insgesamt 1-mal geändert.
Hallo Marcel,
vielleicht solltest Du mal schreiben, was Du machen willst und nicht, wie Deine Versuche in Python
dazu aussehen. Dein Code macht für mich nämlich keinen Sinn.
Mit sorted(starmap(shift, verfueg.items()), reverse=True) erzeugst Du 4 Generatoren, die
Python versucht zu sortieren. Und in welcher Reihenfolge?
Da für Generatoren keine Vergleichsoperatoren existieren, werden sie nach ihrer Speicheraddresse
sortiert. Hast Du Dir jemals angeschaut, was in result steht?
Du kannst Dir auch weitere Fragen stellen:
Was soll shift generieren?
Und was tut es tatsächlich?
Was hat generatePair hier verloren?
Und warum testet jeder Programmierer zuerst seine Funktionen einzeln,
bevor er das gesamte Programm auch nur einmal laufen läßt?
Grüße
Sirius
vielleicht solltest Du mal schreiben, was Du machen willst und nicht, wie Deine Versuche in Python
dazu aussehen. Dein Code macht für mich nämlich keinen Sinn.
Mit sorted(starmap(shift, verfueg.items()), reverse=True) erzeugst Du 4 Generatoren, die
Python versucht zu sortieren. Und in welcher Reihenfolge?
Da für Generatoren keine Vergleichsoperatoren existieren, werden sie nach ihrer Speicheraddresse
sortiert. Hast Du Dir jemals angeschaut, was in result steht?
Du kannst Dir auch weitere Fragen stellen:
Was soll shift generieren?
Und was tut es tatsächlich?
Was hat generatePair hier verloren?
Und warum testet jeder Programmierer zuerst seine Funktionen einzeln,
bevor er das gesamte Programm auch nur einmal laufen läßt?
Grüße
Sirius