Elemente in Liste bearbeiten?

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
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Also angenommen ich habe eine Liste

liste = ['Hallo','ich','bin','der','Civex']

Die Liste möchte ich nun so bearbeiten, dass nacher es so aussieht:

liste = ['##Hallo##','##ich##','##bin##','##der##','##Civex##']

Ich hab so meine Probleme mit Listen, Typen und Dictionaries :(.

Also ich bekomm es in etwa falsch hin:

Code: Alles auswählen

list = ['Hallo','ich','bin','der','Civex'] 

while len(list) > 0:
    element_to_modify = list.pop(0)
    modified_element= "##" + element_to_modify + "##"
    new_list= []
    new_list.append(modified_element)
Das ist insofern falsch, weil mir dann für jedes Element eine Liste gebildet wird :(

[###Hallo###]
[###ich###]
[###bin###]
etc.

Kann mir jemand bitte helfen? :(
Wie bearbeite ich Elemente INNERHALB der Liste und füge sie wieder IN diesselbe Liste zurück?
Zuletzt geändert von CiveX am Donnerstag 11. Juni 2009, 17:02, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

data = ['Hallo','ich','bin','der','Civex'] 
data = ['##' + element + '##' for element in data]
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ungetestet

Code: Alles auswählen

liste = ['##%s##' % s for s in text.split()]
MfG
HWK
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

kann man das irgendwie anders schreiben, also nicht INNERHALB liste =[for x in b]

sondern irgendwie mit for / while extern ausserhalb ?

Umständlich ich weiß, aber irgendwie kapier ich das nicht :(

kann man das irgendwie anders schreiben, also nicht INNERHALB liste =[for x in b]

sondern irgendwie mit for / while extern ausserhalb ?

Umständlich ich weiß, aber irgendwie kapier ich das nicht :(

Ich frage deshalb, WEIL ich einen text habe z.B.

text ="hallo ich bin der civex"

daraus mache ich die liste mit

list = text.split()

was dann wiederum

liste = ['Hallo','ich','bin','der','Civex'] ergibt, und wie ich nun weiter vorgehe ist mir nicht klar, auch nicht mit

data = ['Hallo','ich','bin','der','Civex']
data = ['##' + element + '##' for element in data]

weil die Liste generiere ich ja mit text ="bla bla blubb lbub"
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

warum

denn

soviele

leerzeilen?


das ist eine sogenannte list comprehension.
sehr nützlich und werkzeug der wahl wenn man eine liste aus einer anderen liste erstellen will.

http://docs.python.org/tutorial/datastr ... rehensions

das kann man natürlich auch in einer schleife erledigen, aber hier ist auf jeden die lc angebracht. der code ist dadurch viel lesbarer, kürzer, sicherer...
http://www.kinderpornos.info
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Natuerlich kannst Du auch schreiben:

Code: Alles auswählen

In [1]: text ="hallo ich bin der civex"

In [2]: mylist = []

In [3]: for s in text.split():
   ...:     mylist.append('##%s##' % s)
   ...:     
   ...:     

In [4]: mylist
Out[4]: ['##hallo##', '##ich##', '##bin##', '##der##', '##civex##']
:wink:
yipyip
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Du hast es dir, glaube ich, so ähnlich vorgestellt:

Code: Alles auswählen

liste = ['Hallo','ich','bin','der','Civex']
for i in xrange(len(liste)):
    liste[i] = "##" + liste[i] + "##"
Das ist ganz gewiss nicht die elegante Lösung, aber es schadet ja auch nicht, wenn du versteht, dass und warum es so auch funktioniert.
Dass du mit list comprehensions deine Schwierigkeiten hast, verstehe ich. Das ging mir ganz am Anfang auch so. Ändert sich irgendwann ... :wink:
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Jaaa, Numerix, du hast's erfasst. Allerdings, wenn ich mir die Comprehension anschaue macht sie ja durchaus Sinn.

Eine neue Liste mit angefügten Strings aus einer Liste erstellen. Macht ja Sinn.

Die For-Schleife von dir verstehe ich aber ja auf anhieb. Für jedes i, das aus der gesamter Anzahl aller Elementen in der Liste ermittelt wird, wird ein "## + jeweiliges i-te Element der momentanem Durchlaf + ##" gemacht.

Jetzt bräuchte ich noch die Möglichkeit aus einem Element einzelne Elemente zu machen.

also z.B.

list = ['Yes','No']
new_list = ['Y,'e','s','N','o']

Ich kriegs nicht hin. Weder mit irgendwelchem Sinnfreiem join Code zum ganzem String zusammenfügen, noch mit split() und irgendeine extras im () :(.
Zuletzt geändert von CiveX am Donnerstag 11. Juni 2009, 17:42, insgesamt 1-mal geändert.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Code: Alles auswählen

neu = []
for x in l:
    neu.extend(list(x))
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

Panke, deinen Code verstehe ich mal gar nicht, ist allerdings auch nicht ganz richtig. Habe es gerade in Eclipse angeworfen.

Ausgabe ist

[['Y', 'e', 's'], ['N', 'o']]

soll aber

['Y', 'e', 's', 'N', 'o'] sein!

Mir schwebt da gerade durch den Kopf die Idee, dass ich es zum einem String mache mit join und dann irgednwie jedes einzeles String zähl und in eine Liste einfüge.
Zuletzt geändert von CiveX am Donnerstag 11. Juni 2009, 17:46, insgesamt 1-mal geändert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

>>> list(''.join(['Yes','No']))
['Y', 'e', 's', 'N', 'o']
MfG
HWK
CiveX
User
Beiträge: 34
Registriert: Samstag 23. Mai 2009, 11:48

OMG! Simples list.... OMG! :shock:

Ich glaub das reicht mal für jetzt mit Python. Wenn ich schon so banales frage... :oops:

Vielen lieben Dank an alle!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

@CiveX: Eben vergessen:
Nenne eine Liste nicht list! Damit überdeckst du den eingebauten Type list!
Auch "liste" (mein Beispiel) ist nicht das Gelbe vom Ei. Denk dir einen Namen aus, der etwas aussagt über das, was in der Liste ist.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

CiveX hat geschrieben:Ich glaub das reicht mal für jetzt mit Python. Wenn ich schon so banales frage... :oops:
na, mal langsam. das muss man halt auch erstmal wissen.
strings sind sequenzen, daher kannst du zb folgendes tun:

Code: Alles auswählen

In [2]: for zeichen in "Hallo":
   ...:     print zeichen,
  
H a l l o
und list macht folgendes:

Code: Alles auswählen

Help on class list in module __builtin__:

class list(object)
 |  list() -> new list
 |  list(sequence) -> new list initialized from sequence's items
http://www.kinderpornos.info
Antworten