verschachtelte liste mit integer-paaren

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
Gast

Montag 13. September 2004, 11:01

um koordinaten aus eine datei zu verarbeiten
benötige ich noch eine konvertierung einer verschachtelten liste.
den string konnte ich bis zu dieser stelle filtern und umwandeln:

[[465,34,255,123,122,43],[144,123,78,66],[123,53,143,13]]

ich benoetige jetzt noch eine möglichst einfache loesung, um
folgende liste zu erhalten:

[[[465,34],[255,123],[122,43]],[[144,123],[78,66]],[[123,53],[143,13]]]

meine versuche hatten leider keinen erfolg :(

gruß micha
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Montag 13. September 2004, 11:20

Hi. Fass doch einfach die Listen zu einer einzigen zusammen und erstell daraus dann immer 2er Paare...

Code: Alles auswählen

l=[[465,34,255,123,122,43],[144,123,78,66],[123,53,143,13]]
erg=[]
for i in l:
	erg.extend(i)
erg=[erg[i:i+2] for i in xrange(0,len(erg),2)]
mfg Milan
Gast

Montag 13. September 2004, 12:05

hi milan,
danke für die antwort.
ich habe leider das problem das ich diese struktur brauche:
[[[465,34],[255,123],[122,43]],[[144,123],[78,66]],[[123,53],[143,13]]]
das heißt, die zweierpaare sollten innerhalb der inneren listen
sein.
ich kann also die liste nicht zusammenführen.
die koordinanten erhalte ich aus einer datei, sind also jedesmal anders.
zur weiterverarbeitung benötige ich genau diese oben beschriebene
struktur

viele grüße micha
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 13. September 2004, 12:59

Hi micha,

wenn Du uns den Ursprungsstring verrätst, können wir sicher einfacher einen Parser dafür zusammenstricken, als an dem halbaufbereiteten String rumzuwursteln.

Code: Alles auswählen

daten = "465,34,255,123,122,43,144,123,78,66,123,53,143,13"
tmp = daten.split(",")
result = [[tmp[:2],tmp[2:4],tmp[4:6]],[tmp[6:8],tmp[8:10]],[tmp[10:12],tmp[12:]]]
print result
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 13. September 2004, 13:16

Hi!

Es geht wahrscheinlich kaum umständlicher, aber das sollte funktionieren:

Code: Alles auswählen

liste = [[465,43,255,123,122,43],[144,123,78,66],[123,53,143,13]]

erg = []
for i in range(len(liste)):
	erg.append([])
	for j in range(0,len(liste[i]),2):
		x = liste[i][j:j+2]
		erg[i].append(x)
		
print erg
Gruß, mawe
Gast

Montag 13. September 2004, 13:32

hi dokie,
vielen dank.
es handelt sich bei den strings um koordinaten von polygon-linienin einer datei.
z.B. so:
...
polyline = "23,232,232,232,23,23"
...
polyline ="123,45,133,456,122,110,10,100"
...
polyline ="123,45,133,456,122,110,10,100"

anzahl der linien und string-inhalte ist immer unterschiedlich!
die anzahl der ziffern immer gerade(koordinaten)
ich habe mit re.search (...)die stringmuster gesucht und dann
zu einem string zusammengefügt.
den dann wieder versucht zu zerlegen

gruß
micha
Gast

Montag 13. September 2004, 13:44

sory dookie,
natürlich dookie, nicht dokie :)

danke dooky, danke mawe

ich glaube das hilft mir gut weiter

viele grüße
micha
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Montag 13. September 2004, 19:18

Anonymous hat geschrieben:hi dokie,
vielen dank.
es handelt sich bei den strings um koordinaten von polygon-linienin einer datei.
z.B. so:
...
polyline = "23,232,232,232,23,23"
...
polyline ="123,45,133,456,122,110,10,100"
...
polyline ="123,45,133,456,122,110,10,100"
Was ist denn das für ein System, wo das so dargestellt wird? Ich kenne nur polyline-Elemente, die mit x y,x y,x y etc. dargestellt werden, die Wertepaare also durch Kommata getrennt werden, und die x und y-Werte durch ein Leerzeichen. Wundert mich, dass alles durch Kommata abgetrennt werden soll.

Ich frage nur aus Interesse.

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 13. September 2004, 19:47

Code: Alles auswählen

liste = [[465,43,255,123,122,43],[144,123,78,66],[123,53,143,13]]

erg = []
for entry in liste:
    erg.append([[entry[i], entry[i+1]] for i in xrange(0, len(entry), 2)])
       
print erg
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Montag 13. September 2004, 22:34

hi fs111,

natürlich hast du recht, habe leider den schon separierten
string hier rein kopiert(montag ist nicht mein tag).
die ursprünglichen strings sind :
<polyline points="150,10 150,50 200,10" />
<polyline points="150,60 150,100 200,60" />
aus einer svg-datei.
ich hatte die kommas da drin, um besser atoi benutzen zu können.

hi dookie,
danke, super idee.
mit Deiner und maves hilfe ist der abend gerettet.

viele grüße micha
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Dienstag 14. September 2004, 00:47

Hi nochmal,

1. mit den originaldaten ists noch einfacher, und wozu atoi? So was brauchen doch nur C/C++ coder ;)

Code: Alles auswählen

points = "150,10 150,50 200,10"
pointlist = [[float(b) for b in a.split(",")] for a in points.split()]
print pointlist

Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Dienstag 14. September 2004, 08:54

Anonymous hat geschrieben:hi fs111,

natürlich hast du recht, habe leider den schon separierten
string hier rein kopiert(montag ist nicht mein tag).
die ursprünglichen strings sind :
<polyline points="150,10 150,50 200,10" />
<polyline points="150,60 150,100 200,60" />
aus einer svg-datei.
ich hatte die kommas da drin, um besser atoi benutzen zu können.
Das kam mir doch bekannt vor ;), wobei du das oben immer noch verdreht hast, mit den "," und den " ". SVG ist schon eine feine Sache, setzt sich nur leider viel zu langsam durch...

[OT]
Welchen Viewer benutzt Du zum anzeigen (adobe, Corel, Batik,ksvg)?
[/OT]

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Gast

Dienstag 14. September 2004, 14:10

hi fs111,

ich kenne bisher nur diese schreibweise:
<polyline points="20,70 50,100 100,100 200,150" ...
warscheinllich gibt es da verschiedene möglichkeiten.
ich benutze übrigends das adobe-plugin.
ich galube allmälig wird's sich durchsetzen.
leider sind die plugins noch nicht bei allen browsern bei.

hi dookie,

ich weis gar nicht warum ich nie auf solche einfachen dinge komme:)
ich habe vor einem monat erst mit python begonnen und kann die vorteile
(weniger code) leider noch nicht richtig nutzen.
vieleicht wirds ja bald mal besser.

viele grüße micha
Antworten