List Ausgabe Filtern

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
Temoc
User
Beiträge: 15
Registriert: Montag 14. September 2009, 11:19

Moin,

ich möchte gerne bestimmte Zeichen, aus einer List herausfiltern um diese in einer Schleife als interger weiterzuverwenden.

Code: Alles auswählen

servers = ['s/1 -t:tcp -h 127.0.0.1 -p 6502',' s/2 -t:tcp -h 127.0.0.1 -p 6502']
Aus dieser List, möchte ich gerne "1" und "2" herausbekommen(direkt nach dem "/" Zeichen), es kann auch mal sein dass dort ein höherer Wert steht zb "12" oder "123"... Habe es schon mit .join probiert, aber dies funktionierte nicht wie .split, da es bereits ein List-Variable ist. Daher bitte ich hier um Hilfe für mein Problem.
Zuletzt geändert von Temoc am Donnerstag 7. Oktober 2010, 10:15, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wie wärs mit dem re-Modul?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Code: Alles auswählen

>>> servers = [s/1 -t:tcp -h 127.0.0.1 -p 6502, s/2 -t:tcp -h 127.0.0.1 -p 6502]
  File "<stdin>", line 1                                                       
    servers = [s/1 -t:tcp -h 127.0.0.1 -p 6502, s/2 -t:tcp -h 127.0.0.1 -p 6502]
                     ^
SyntaxError: invalid syntax
Wenn es sich hier um eine Liste von Strings handelt, mussd du halt ueber die Liste laufen und split auf jedes Item anwenden.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Temoc
User
Beiträge: 15
Registriert: Montag 14. September 2009, 11:19

Hi,

also ich bekomme diese List von einem anderen Modul so ausgeben. Hier der Code:

Code: Alles auswählen

>>> m.getAllServers()
[s/1 -t:tcp -h 127.0.0.1 -p 6502, s/2 -t:tcp -h 127.0.0.1 -p 6502]
>>> servers = m.getAllServers()
>>> print servers
[s/1 -t:tcp -h 127.0.0.1 -p 6502, s/2 -t:tcp -h 127.0.0.1 -p 6502]
re-Modul, Reguläre Ausdrücke beherrsche ich leider überhaupt nicht. Weder in Python, noch in einer anderen Programmiersprache...
Temoc
User
Beiträge: 15
Registriert: Montag 14. September 2009, 11:19

Konnte es selbst lösen, vielen Dank an Hyperion.

Habe mir das re-modul nochmal genauer angeschaut ;)

Lösung:

Code: Alles auswählen

''.join(re.split('/',str(servers[x]))[1])[0]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dafuer reicht auch `str.split` und wenn ich die Bedeutung von `x` jetzt nicht falsch rate ist auch das joinen ueberfluessig.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hätte mir das jetzt so vorgestellt:

Code: Alles auswählen

In [5]: import re

In [10]: re.search("(?<=/)\d", s).group()
Out[10]: '1'
Oder ohne re:

Code: Alles auswählen

In [1]: s = 's/1 -t:tcp -h 127.0.0.1 -p 6502'

In [2]: s.split()
Out[2]: ['s/1', '-t:tcp', '-h', '127.0.0.1', '-p', '6502']

In [3]: s.split()[0]
Out[3]: 's/1'

In [4]: s.split()[0][2:]
Out[4]: '1'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:

Code: Alles auswählen

re.search("(?<=/)\d", s).group()
Es sollen mehrere Ziffern möglich sein.

Code: Alles auswählen

re.search("(?<=/)\d+", s).group()
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Es sollen mehrere Ziffern möglich sein.

Code: Alles auswählen

re.search("(?<=/)\d+", s).group()
Jo, danke :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten