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

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.
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

a = ['a', 'b', 'c']
print [''.join(a)]
the more they change the more they stay the same
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

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 ;)
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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']]
Zuletzt geändert von Anonymous am Donnerstag 28. Januar 2016, 15:51, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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()`.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

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.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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
Zuletzt geändert von Anonymous am Donnerstag 28. Januar 2016, 16:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Die Lösung wurde Die schon vorgekaut. Du musst diese nur noch abschreiben.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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.
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.
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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.
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.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

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
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
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.
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Mcfly
User
Beiträge: 8
Registriert: Dienstag 19. Januar 2016, 13:35

Naja Danke, aber es gab auch den herkümmlichen weg das problem zu lösen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Antworten