Seite 1 von 1
Elemente in Liste bearbeiten?
Verfasst: Donnerstag 11. Juni 2009, 16:52
von CiveX
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?
Verfasst: Donnerstag 11. Juni 2009, 16:58
von Leonidas
Code: Alles auswählen
data = ['Hallo','ich','bin','der','Civex']
data = ['##' + element + '##' for element in data]
Verfasst: Donnerstag 11. Juni 2009, 16:58
von HWK
Verfasst: Donnerstag 11. Juni 2009, 17:04
von CiveX
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"
Verfasst: Donnerstag 11. Juni 2009, 17:09
von Dill
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...
Verfasst: Donnerstag 11. Juni 2009, 17:25
von yipyip
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##']
yipyip
Verfasst: Donnerstag 11. Juni 2009, 17:33
von numerix
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 ...

Verfasst: Donnerstag 11. Juni 2009, 17:37
von CiveX
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 ()

.
Verfasst: Donnerstag 11. Juni 2009, 17:41
von Panke
Verfasst: Donnerstag 11. Juni 2009, 17:45
von CiveX
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.
Verfasst: Donnerstag 11. Juni 2009, 17:46
von HWK
Code: Alles auswählen
>>> list(''.join(['Yes','No']))
['Y', 'e', 's', 'N', 'o']
MfG
HWK
Verfasst: Donnerstag 11. Juni 2009, 17:49
von CiveX
OMG! Simples list.... OMG!
Ich glaub das reicht mal für jetzt mit Python. Wenn ich schon so banales frage...
Vielen lieben Dank an alle!
Verfasst: Donnerstag 11. Juni 2009, 17:51
von numerix
@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.
Verfasst: Donnerstag 11. Juni 2009, 17:58
von Dill
CiveX hat geschrieben:Ich glaub das reicht mal für jetzt mit Python. Wenn ich schon so banales frage...
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