Seite 1 von 2

Variablen nummerieren

Verfasst: Montag 15. März 2010, 11:33
von makuee
Hallo zusammen,

bin nicht gerade ein Programmierprofi, von daher hoffentlich eine recht einfache Frage:

ich zeih mir über eine API Daten und speicher diese als Variable
z.b.
klaus ernst
holger unernst
...

jetzt würde ich gern eine Nummerierung hinufügen
also so:
1. klaus ernst
2. holger unernst

wie bewerkstellige ich das denn am einfachsten?

Danke für Hilfe

Verfasst: Montag 15. März 2010, 11:38
von .robert
Hi,

also so ungenau, wie du dein Problem beschrieben hast, wird es sehr schwer, dir zu helfen.

Vielleicht zeigst du einfach mal deinen Code?

Verfasst: Montag 15. März 2010, 11:59
von lunar
Möchtest Du sowas:

Code: Alles auswählen

variable_1 = 'spam'
variable_2 = 'eggs'
In diesem Fall möchtest Du tatsächlich eine Liste verwenden …

Re: Variablen nummerieren

Verfasst: Montag 15. März 2010, 12:03
von /me
makuee hat geschrieben:ich zeih mir über eine API Daten und speicher diese als Variable
z.b.
klaus ernst
holger unernst
...

jetzt würde ich gern eine Nummerierung hinufügen
also so:
1. klaus ernst
2. holger unernst
Vielleicht erklärst du erst einmal den Aufbau des Programms und zeigst, wo und wie die Daten in die Variable geschrieben werden. Konkreter Beispielcode wäre schön.

Vorher kann man nur spekulieren, was für dich richtig sein könnte.

Verfasst: Montag 15. März 2010, 12:06
von makuee
gut, dann doch der code

Code: Alles auswählen

import flickrapi
api_key = '....'
eingabe=raw_input("Bitte Stadtnamen eingeben")
place = eingabe
flickr = flickrapi.FlickrAPI(api_key, cache=True)
photos = flickr.places_find(query=place)
for place in photos[0]:
   sugar=place.attrib['place_id']
   print sugar
ich erhalte

Code: Alles auswählen

IkEb0MefBJs0tq0
FGtXm.2bAZ2aOwdjPQ
kPLKJXSbBZ1rWfnQ
7rtlMS2aBpp7oog
ElaAIKmbBZ26Vl6a
nun möchte ich es aber gerne, dass die place_id's mit einer nummerierung versehen werde, etwa so:

1. IkEb0MefBJs0tq0
2. FGtXm.2bAZ2aOwdjPQ
3. ...

hoffentlich verständlicher :)

Danke

Verfasst: Montag 15. März 2010, 12:11
von .robert
ah ja...

http://docs.python.org/tutorial/datastr ... e-on-lists

Code: Alles auswählen

...
print photos[0].index(place), sugar
(ungetestet/so in etwa...)

Verfasst: Montag 15. März 2010, 12:11
von CM

Code: Alles auswählen

for n, place in enumerate(photos[0]):
   sugar=place.attrib['place_id']
   print "%d: %s" % (n, sugar)
Was aber nur die *Ausgabe* verändert und nicht die Variablen "nummeriert".

Ist das was Du wünscht?

edit: Die Lösung von .robert macht in etwas das Selbe, wird bei langen Listen aber langsamer sein, da wiederholt .index() aufgerufen werden muß.

Verfasst: Montag 15. März 2010, 12:18
von .robert
Und enumerate ist natürlich auch schöner :oops:

Beide haben aber natürlich den Makel, dass bei 0 angefangen wird...

Verfasst: Montag 15. März 2010, 12:32
von CM
Seid python 2.6 gibt es einen start-Parameter - der OP kann auch in den Docs nachschauen ... ;-)

Aber irgendwie bin ich mir nicht ganz sicher, dass dies die gesuchte Lsg. ist.

Verfasst: Montag 15. März 2010, 12:37
von makuee
hey cm,

wie du schon fragst, würde ich gern nicht nur die Ausgabe so haben, sondern auch die Variable verändern. So das dann in "sugar" sowohl die Nummerierung wie auch die "place_id" enthalten sind.

Trotzdem danke nochmal

Verfasst: Montag 15. März 2010, 12:40
von gkuhl
CM hat geschrieben:Die Lösung von .robert [...], wird bei langen Listen aber langsamer sein, da wiederholt .index() aufgerufen werden muß.
In dem Fall bietet sich an Dictionaries zu verwenden, die hier schneller sind:

Code: Alles auswählen

d = dict(enumerate(photos[0]))
Grüße
Gerrit

Verfasst: Montag 15. März 2010, 12:42
von .robert
Da photos ja eine Liste ist, ist die Information ja schon durch die Position der Elemente in der Liste gegeben. Warum willst du das extra noch da rein schreiben?
Für Ausgaben kannst du dass ja wie oben beschrieben mit Ausgeben.

Verfasst: Montag 15. März 2010, 12:55
von makuee
hey robert,

anscheinend bin ich noch nicht ganz aus dem wochenende zurück, aber wie kann ich denn auf einen bestimmten Eintrag aus der Liste photos zugreifen. z.b. den 2ten

danke

Verfasst: Montag 15. März 2010, 12:59
von gkuhl

Verfasst: Montag 15. März 2010, 13:00
von CM
Wie wäre es Du liest erst einmal das Tutorial? Dann kannst Du
a) solch einfache Fragen in Zukunft selber klären und
b) weitergehende Fragen etwas klarer stellen.

Zur letzten Frage:

Code: Alles auswählen

some_data = [ ... ]
# access first item
some_data[0]
# access n-th item
some_data[n-1]
# access last item
some_data[-1]

Verfasst: Montag 15. März 2010, 13:07
von makuee
also nochmal,

das was ihr da hinschreibt, funktioniert nicht. ganz so dämlich bin ich nun nicht. aus dem grund schreib ich auch in dieses forum. habt ihr denn schon mal mit der flickr api gearbeitet, dann probiert es aus und schreibt nicht irgendwelche array kommandos nieder.

man man man und das zum montag

Verfasst: Montag 15. März 2010, 13:18
von CM
- Du stellst eine Frage, von der hier mehrere meinen, dass sie nicht zielführend ist.
- Du gehst nicht auf Rückfragen ein.
- Du stellst anschließend die Frage, wie man auf das zweite Element einer Liste zugreifen kann. Dieses ist Basiswissen und die erste Frage läßt ebenfalls vermuten, dass Basiswissen fehlt, weshalb wir Dich auf das Tutorial verwiesen haben. Das ist keine Arroganz von unserer Seite, sondern soll erreichen, das wir auf einem Niveau weitermachen können, auf dem Fragen sinnvoller gestellt werden können.
- Jetzt schreibst Du in einem Atemzug "funktioniert nicht" und wirst unfreundlich.

So kommen wir nicht weiter.

Also: Variablen (die es im engeren Sinne in Python nicht gibt) nummeriert man höchstens in der Ausgabe - falls das sinnvoll ist. Man kann Werte aber in einer Liste speichern. Hierbei haben sie eine bestimmte Reihenfolge - das *könnte* eine Lösung für Dein Problem sein, von dem wir nicht wissen was es ist.

Wie wäre es Du tutst Dir wirklich einmal das Tutorial an? (Das geht fix.) Und formulierst dann dasjenige, was Du *tatsächlich* erreichen willst? (Das wird wohl kaum das Umbenennen von "Variablen" sein.)

Gruß,
Christian

Verfasst: Montag 15. März 2010, 13:22
von .robert
hm, ich bin jetzt einfach mal davon ausgegangen, dass places_find eine Liste zurück gibt.
Wenn dem nicht so ist: wie sieht denn der Rückgabewert aus?

Wie gesagt, am einfachsten ist es wohl, wenn du genau beschriebst:
a) was du hast, und
b) wo du hin willst

Verfasst: Montag 15. März 2010, 13:37
von makuee
vielleicht kommen wir so weiter.
wenn meine formulierung von vorhin dir ein wenig zu flappsig vorkam, dann entschuldige ich mich dafür.

ziel:
ich möchte mit der abfrage nach der region die place_id erhalten

Code: Alles auswählen

import flickrapi
api_key = '......'
eingabe=raw_input("Bitte Stadtnamen eingeben")
place = eingabe
flickr = flickrapi.FlickrAPI(api_key, cache=True)
photos = flickr.places_find(query=place)
for n, place in enumerate(photos[0]):
   sugar=place.attrib['place_id']
   print sugar
nun gibt mir das ergebnis allerdings 5 verschiedene id's zurück.
aus diesen 5 id's möchte ich mir nun die passende aussuchen und diese über die eingabe 1,2,3, oder oder oder weiterverarbeiten.
also in etwa so --> ausgabe:

Code: Alles auswählen

0: IkEb0MefBJs0tq0
1: FGtXm.2bAZ2aOwdjPQ
2: kPLKJXSbBZ1rWfnQ
3: 7rtlMS2aBpp7oog
4: ElaAIKmbBZ26Vl6a

Code: Alles auswählen

eingabe=raw_input("Bitte genauer werden:")
2
über die 2 wird nun die place_id kPLKJXSbBZ1rWfnQ in den weiteren code eingeben.
Natürlich könnte man auch einfach die place_id kopieren, aber ich wöllte es gern bedienungsfreundlicher.
Hoffe das ist nun zu verstehen.
Ciao

Verfasst: Montag 15. März 2010, 13:45
von mkesper
Hmm, der Benutzer kann anhand dieser kryptischen ID genauer aussuchen, welchen Ort er auswählen möchte? Da muss doch irgendwo noch eine menschenlesbare Bezeichnung herkommen...