Seite 1 von 2

Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 13:57
von Mcfly
Hallo

Brauche dringen hilfe. und zwar möchte ich aus a=['a', 'b', 'c'] in eine neue liste ['abc'] schreiben.

a=['a', 'b', 'c']
summe=0
liste=[]
liste1=[]
for i in a[0:3]:
*
*
*
print liste

danke im vorraus

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 14:25
von Dav1d

Code: Alles auswählen

a = ['a', 'b', 'c']
print [''.join(a)]

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 14:45
von bwbg
Auch wenn man die Frage recht schnell mit str.join beantworten könnte, lässt sich das Problem durchaus verallgemeinern:

Wie lässt sich eine Liste (oder Sequenz) von Sequenzen in eine flache, eindimensionale Sequenz überführen ([[a]] -> [a]). Die Antwort wäre hier m. E. itertools.chain.

Code: Alles auswählen

>>>xs = [[1], [2, 3], [4, 5, 6]]
>>>list(chain(*xs)) == [1, 2, 3, 4, 5, 6]
True
>>> ss = ['a', 'bb', 'ccc']
>>> list(chain(*ss)) == ['a', 'b', 'b', 'c', 'c', 'c']
True
Woraus ich allerdings nicht schlau werde, ist die Anforderung, als Ergebnis eine Liste mit genau einem Element (hier: Zeichenkette 'abc') zu erzeugen.

P.S.: Es hat schon jemand getan, hoffen wir mal, dass das dem Lernerfolg nicht im Wege steht ;)

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 15:26
von Mcfly
Dav1d hat geschrieben:

Code: Alles auswählen

a = ['a', 'b', 'c']
print [''.join(a)]
Erst einmal Danke für die Hilfe.

Leier funktioniert das für eine Funktion bzw. Def-Funktion nicht.
Hab es bis hierhin geschafft aber leider lassen sich die ersten beoden listen nicht raus eliminieren.

Code: Alles auswählen

a=['a', 'b', 'c']
liste=[]
k=""
for i in a[0:3]:
    k=k+i
    liste.append([k])
print liste
>>>
[['a'], ['ab'], ['abc']]

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 15:42
von snafu
bwbg hat geschrieben:Wie lässt sich eine Liste (oder Sequenz) von Sequenzen in eine flache, eindimensionale Sequenz überführen ([[a]] -> [a]). Die Antwort wäre hier m. E. itertools.chain.
Und warum nicht `chain.from_iterable()`?

Übrigens denke ich schon, dass man das Zusammenführen von Strings als Spezialfall ansehen kann. Und für diesen Spezialfall existiert `str.join()`.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 15:44
von snafu
Mcfly hat geschrieben:Hab es bis hierhin geschafft aber leider lassen sich die ersten beoden listen nicht raus eliminieren.
a=['a', 'b', 'c']
liste=[]
k=""
for i in a[0:3]:
k=k+i
liste.append([k])
print liste
>>>
[['a'], ['ab'], ['abc']]
Warum verwendest du das`join()` jetzt nicht?

Es ist seltsam, zu behaupten, dass eine Lösung nicht funktioniert, wenn man den Vorschlag überhaupt nicht anwendet...

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 15:51
von bwbg
1. Hä?
2. Code-Tags benutzen!
2. Grundlagen lernen! Wildes Rumraten bringt Dich hier nicht weiter.

@snafu: chain.from_iterable ist mir bisher noch nicht untergekommen. Mal sehen, ob ich das nächste Woche auch noch im Kopf habe. Dass str.join ein Spezialfall ist, ist mit bewusst. Wenn man es ausschließlich mit Strings zu tun hat, sollte man diesen auch verwenden.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 15:57
von Mcfly
snafu hat geschrieben:
Mcfly hat geschrieben:Hab es bis hierhin geschafft aber leider lassen sich die ersten beoden listen nicht raus eliminieren.
a=['a', 'b', 'c']
liste=[]
k=""
for i in a[0:3]:
k=k+i
liste.append([k])
print liste
>>>
[['a'], ['ab'], ['abc']]
Warum verwendest du das`join()` jetzt nicht?

Es ist seltsam, zu behaupten, dass eine Lösung nicht funktioniert, wenn man den Vorschlag überhaupt nicht anwendet...

Hi

leider kommt das hier raus:

Code: Alles auswählen

import string
a=['a', 'b', 'c']
liste=[]
k=""
for i in b[0:3]:
    k=[string.join(a)]
    liste.append(k)
print liste
>>>
[['a b c'], ['a b c'], ['a b c']]

Also die liste kommt dreimal raus.

hast du evtl eine idee wie ich die nur einmal auflisten kann

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:04
von bwbg
Die Lösung wurde Die schon vorgekaut. Du musst diese nur noch abschreiben.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:11
von Mcfly
bwbg hat geschrieben:Die Lösung wurde Die schon vorgekaut. Du musst diese nur noch abschreiben.
so leicht ist das nicht: es geht um ein Auslesen eines Catia V5 Stammbaums. Es handelt sich um ein string. wenn ich eine schleife aufbaue, dann spuckt shell jeden buchstabden als string aus. dehsalb habe ich den bereich definiert, den ich gerne auslesen möchte. deshalb funktioniert dein chain.... nicht.
ich wollte erst einmal klein anfangen und versuchen die passennden string-buchstaben in sinnvolle strings umwandeln.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:18
von BlackJack
@Mcfly: Doch die Lösung für Dein genanntes Problem ist so einfach. Wobei das Problem von Einzelbuchstaben in einer Liste gar nicht erst existieren sollte, denn wenn eine Schleife über einen Wert Einzelbuchstaben liefert, dann ist das in der Regel eine Zeichenkette. Und die sollte man halt nicht in eine Liste mit Einzelbuchstaben zerlegen wenn man keine Einzelbuchstaben sondern eine Zeichenkette haben will. Die man am Anfang ja mal hatte. Du machst da echt ziemlich wirre Sachen. Lass das sein. :-)

Edit: Die `join()`-Funktion aus dem `string`-Modul solltest Du übrigens nicht mehr benutzen, das wurde Dir auch anders gezeigt.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:32
von Mcfly
BlackJack hat geschrieben:@Mcfly: Doch die Lösung für Dein genanntes Problem ist so einfach. Wobei das Problem von Einzelbuchstaben in einer Liste gar nicht erst existieren sollte, denn wenn eine Schleife über einen Wert Einzelbuchstaben liefert, dann ist das in der Regel eine Zeichenkette. Und die sollte man halt nicht in eine Liste mit Einzelbuchstaben zerlegen wenn man keine Einzelbuchstaben sondern eine Zeichenkette haben will. Die man am Anfang ja mal hatte. Du machst da echt ziemlich wirre Sachen. Lass das sein. :-)

Edit: Die `join()`-Funktion aus dem `string`-Modul solltest Du übrigens nicht mehr benutzen, das wurde Dir auch anders gezeigt.
http://www.fotos-hochladen.net/view/catiajthdkyxn9o.png
http://img5.fotos-hochladen.net/uploads ... x9bj16.png

Siehe Bilder damit du die Sachlage verstehst.So sieht das problem aus.
Wenn ich den Baum auslesen will, kommt ein langer String.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:51
von BlackJack
@Mcfly: Welcher Baum? Was ist da was? Und wo stellt sich da das Problem von Einzelbuchstaben die man zusammensetzen müsste? Ich sehe eine Liste mit Zeichenketten die anscheinend die Zeilen sind (was man übrigens echt nicht als *Bild* zeigen müsste, das ist Text den man auch einfach in den Beitrag einfügen könnte).

Letztendlich scheint das XML zu sein. Das verarbeitet man nicht mit Zeichenkettenoperationen sondern mit einem XML-Parser.

Edit: Wobei ich erst einmal prüfen würde ob das tatsächlich eine Zeichenkette ist und nicht eine Zeichenketten*darstellung* einer komplexeren Objektstruktur.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 16:52
von snafu
Da liegt offenbar XML vor. Und XML sollte man immer mit einem XML-Parser bearbeiten.

Ganz ehrlich, wenn du auf diesem Level weiterprogrammierst, dann wird das noch ein sehr beschwerlicher Weg für dich...

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 17:15
von Mcfly
Okay
es handelt sich um ein spezifikationsbaum aus catia v5. ich habe ein bauteil konstruiert mit (Tasche,Bohrung etc.) und diesen stammbaum in python übertragen. Python ließt diesen baum buchstaben für buchstaben und gibt jeden buchstaben als zeichenkette in shell an. deshalb ist es für mich schwer diese zeichenkette in ein wort als zeichenkette und dann in eine liste zu packen. deshalb habe ich ein programm geschrieben. die schleife
"for i in range(len(tree)):
die buchstaben zwischen zwei klammern soll er mir raus schreiben ...<treeview>.das problem ist , dass er mir eine liste angibt. aber in der liste sind die buchstaben wieder in einer zeichenkette angegeben.---> ["t","r","e","e","v","i","e","w"]

versteht ihr??

jetzt war meine idee einfach diese liste wieder mit der schleife,
for i in .....
um dann diese liste mit zeichenkette in ["treeview"] zu schreiben.
leider funktioniert das mit ""join() nicht. siehe oben

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 17:33
von noisefloor
Hallo,
versteht ihr??
Nein. Deutsch ist auch wesentlicher einfacher verständlich, wenn man auf Groß- / Kleinschreibung achtet...
und diesen stammbaum in python übertragen
Und wie?

Gruß, noisefloor

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 18:02
von BlackJack
@Mcfly: Python liest diesen Baum nicht Zeichen für Zeichen sondern *Du*. Wenn Du den nicht Zeichen für Zeichen ausgeben willst, dann schreib halt keine Schleife die das macht, weil Du das ja gar nicht willst. Selbst für das was Du da machst, willst Du nicht in einer Schleife über die einzelnen Buchstaben gehen, sondern würdest besser die Indexwerte der Begrenzungszeichen suchen und dann mit den Werten auf den „slice“ zwischen diesen Zeichen zugreifen. Das sind Grundlagen der Zeichenkettenverarbeitung die Dir ein Python-Tutorial eigentlich vermitteln sollte.

Da das aber keine unstrukturierte Zeichenkette ist, sondern anscheinend XML, solltest Du auch gar nicht irgendetwas zwischen Klammern ausgeben wollen, sondern einen XML-Parser verwenden um das in eine Objektstruktur zu bringen mit der man dann vernünftiger, nämlich auf der Struktur der Daten, arbeiten kann.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Donnerstag 28. Januar 2016, 18:16
von Sirius3
@Mcfly: um es nochmal direkt zu sagen: Lies das Tutorial zu ElementTree, wende es auf Deine Datei an und stell wieder eine Frage, wenn Du nicht weiterkommst, ein bestimmtes Tag aus den Daten zu lesen.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Freitag 29. Januar 2016, 19:28
von Mcfly
Naja Danke, aber es gab auch den herkümmlichen weg das problem zu lösen.

Re: Hillfee! aus a=['a', 'b', 'c'] in ['abc']

Verfasst: Freitag 29. Januar 2016, 20:47
von /me
Mcfly hat geschrieben:Naja Danke, aber es gab auch den herkümmlichen weg das problem zu lösen.
Ja. Die Verwendung eines XML-Parsers wie ElementTree. Alles andere ist Blödsinn.