list[1:].strip() - Einfachere Lösung gesucht.

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 27. November 2008, 17:05

Das kommt mir sehr umständlich vor:

Code: Alles auswählen

# -*- coding: utf-8 -*-

def strip_ex_second(data):
    """
    >>> strip_ex_second("  eins\\n  zwei\\n  drei")
    ['  eins', 'zwei', 'drei']
    """
    lines = [line for line in data.split("\n")]
    for index, line in enumerate(lines):
        if index==0:
            continue
        lines[index] = line.strip()

    return lines


if __name__ == "__main__":
    import doctest
    doctest.testmod()
Bessere Lösung?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Donnerstag 27. November 2008, 17:27

Moin,

data.split liefert schon eine Liste, da brauchst du keine LC. Ansonsten würde ich das so machen:

Code: Alles auswählen

def strip_ex_second(data):
    lines = list()
    for index, line in enumerate(data.split("\n")):
        if index > 0:
            line = line.strip()
        lines.append(line)
    return lines
Gruß,
Manuel
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 27. November 2008, 17:29

Code: Alles auswählen

map(lambda line: line.strip(), (line for line in data.split('\n')))
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Donnerstag 27. November 2008, 17:31

warum nicht data.splitlines() statt data.split("\n")? Dann ist das vom Betriebssystem unabhängig.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Donnerstag 27. November 2008, 17:31

Ich biete

Code: Alles auswählen

lines = data.split("\n")
lines = lines[:1] + [line.strip() for line in lines[1:]]
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Donnerstag 27. November 2008, 17:37

Noch ne Variante:

Code: Alles auswählen

def strip_ex_second(data):
    return [line.strip() if index > 0 else line
            for index, line in enumerate(data.splitlines())]
Gruß,
Manuel
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 27. November 2008, 17:50

helduel hat geschrieben:data.split liefert schon eine Liste, da brauchst du keine LC.
Ja, das ist ein Fehler, vorher hab ich da alle Einträge mit einem .strip() versehen, deswegen die LC.

@keppla: Deine Lösung sieht bisher am schönsten aus, ich denke die werde ich erstmal nehmen ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten