2017-12-23 2 views
-3

Ich habe die folgende Liste namens "phonenumbers". Ich habe Mühe, die Elemente zu entfernen, die '\ n \ t \ t \ t' und '\ n \ t \ t \ t \ t' enthalten. Ich versuchte "versuchen und außer" -Methode und entfernen ('\ n \ t \ t \ t \ t') aber konnte es nicht funktionieren lassen. Irgendwelche Tipps?Entfernen Sie ein '\ n \ t \ t \ t'-Element aus der Liste

[ '(02271) 6 79', '70', '\ n \ t \ t \ t', '(02271) 6 79', '\ n \ t \ t \ t \ t' , '70', '\ n \ t \ t \ t', '\ n \ t \ t \ t', '(02181) 27 0', '\ n \ t \ t \ t \ t', '3 -0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02181) 27 0 ',' \ n \ t \ t \ t \ t ',' 3- 0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02161) 24 19 ',' \ n \ t \ t \ t \ t ',' 40 ', '\ n \ t \ t \ t', '\ n \ t \ t \ t', '(02161) 24 19', '\ n \ t \ t \ t \ t', '40', '\ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02131) 66 67 ',' \ n \ t \ t \ t \ t ',' 10 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02131) 66 67 ',' \ n \ t \ t \ t \ t ',' 10 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02103) 39 00 ',' \ n \ t \ t \ t \ t ',' 93 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02103) 39 00 ',' \ n \ t \ t \ t \ t ',' 93 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02173) 2 04 7 ',' \ n \ t \ t \ t \ t ',' 3-0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02173) 2 04 7 ',' \ n \ t \ t \ t \ t ',' 3-0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02235) 9 23 04 ',' \ n \ t \ t \ t \ t ',' 30 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02235) 9 23 04 ',' \ n \ t \ t \ t \ t ',' 30 ', '\ n \ t \ t \ t', '\ n \ t \ t \ t', '\ n \ t \ t \ t \ t', '(0221) 3 46 79 40', '\ n \ t \ t \ t ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t \ t ',' (0221) 3 46 79 40 ',' \ n \ t \ t \ t ' , '\ n \ t \ t \ t', '(02232) 4 23', '\ n \ t \ t \ t \ t', '05', '\ n \ t \ t \ t', '\ (02232) 4 23 ',' \ n \ t \ t \ t \ t ',' 05 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (0157) 86 85 74 ',' \ n \ t \ t \ t \ t ',' 43 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (0157) 86 85 74 ',' \ n \ t \ t \ t \ t ',' 43 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02181) 2 78 11 ',' \ n \ t \ t \ t \ t ',' 47 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ', '(02181) 2 78 11', '\ n \ t \ t \ t \ t', '47', '\ n \ t \ t \ t', '\ n \ t \ t \ t', '(02181) 47 49 0 ',' \ n \ t \ t \ t \ t ',' 0-0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02181) 47 49 0 ',' \ n \ t \ t \ t \ t ',' 0-0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02202) 1 88 ',' \ n \ t \ t \ t \ t ',' 60 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02202) 1 88 ',' \ n \ t \ t \ t \ t ',' 60 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (0211) 23 80 ', '\ n \ t \ t \ t \ t', '70', '\ n \ t \ t \ t', '\ n \ t \ t \ t', '(0211) 23 80', '\ n \ t \ t \ t \ t ',' 70 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02235) 9 23 0 ',' \ n \ t \ t \ t \ t ',' 4-0 ',' \ n \ t \ t \ t ',' \ n \ t \ t \ t ',' (02235) 9 23 0 ',' \ n \ t \ t \ t \ t ',' 4-0 ',' \ n \ t \ t \ t ']

+0

Post, was Sie versucht haben, und jemand könnte Ihnen helfen, es zu beheben. –

+0

Anstatt die Elemente zu entfernen, sollten Sie möglicherweise den Code ändern, der die Liste generiert, um sie nicht an erster Stelle einzufügen. Wie wird diese Liste erstellt? –

+0

@Bryan Oakley wird gemacht, indem zuerst die Seite mit Qt gerendert wird und dann lxml verwendet wird, um die Liste über tree.xpath zu extrahieren: phonenumber = tree.xpath ('// span [@ class = "textnummer_ganz"] // text() ') - Website ist: https://www.gelbeseiten.de/schluesselfertigbau/bergheim,,,,,umkreis-50000/s1 – DanielHe

Antwort

0

wie diese versuchen,

result = [i for i in lst if not i.endswith('\t\t')] 
+1

Warum unten abstimmen, bitte kommentieren während unten abstimmen. –

0

Sie könnten ein list-comprehension verwenden, um eine Liste von strings zu schaffen, wo jeder zu Vergangenheit des Tests hat, dass all der Charaktere (c) in die string sind in: '\t\n'. Ich denke, dass dies die effizienteste, Allzweck-Lösung, die für strings arbeiten, die enthalten nur tabs und newlines, ist es auch gut lesbar in Python:

[i for i in lst if all(c not in '\t\n' for c in i)] 

, die das richtige Ergebnis der gibt:

['(02271) 6 79', ' 70', '(02271) 6 79', ' 70', '(02181) 27 0', '3-0', '(02181) 27 0', '3-0', '(02161) 24 19', ' 40', '(02161) 24 19', ' 40', '(02131) 66 67', ' 10', '(02131) 66 67', ' 10', '(02103) 39 00', ' 93', '(02103) 39 00', ' 93', '(02173) 2 04 7', '3-0', '(02173) 2 04 7', '3-0', '(02235) 9 23 04', ' 30', '(02235) 9 23 04', ' 30', '(0221) 3 46 79 40', '(0221) 3 46 79 40', '(02232) 4 23', ' 05', '(02232) 4 23', ' 05', '(0157) 86 85 74', ' 43', '(0157) 86 85 74', ' 43', '(02181) 2 78 11', ' 47', '(02181) 2 78 11', ' 47', '(02181) 47 49 0', '0-0', '(02181) 47 49 0', '0-0', '(02202) 1 88', ' 60', '(02202) 1 88', ' 60', '(0211) 23 80', ' 70', '(0211) 23 80', ' 70', '(02235) 9 23 0', '4-0', '(02235) 9 23 0', '4-0'] 

Sie könnten auch str.isspace() verwenden, die kürzer ist, aber wahrscheinlich würde (ich bin nicht sicher, 100%) sein leicht langsamer wie sie überprüft allewhitespace Zeichen:

[i for i in lst if not i.isspace()] 

, die das gleiche Ergebnis liefert.

+0

Warum der Downvote? –

1

Sie für einen einfachen Ausdruck gehen könnte wie

^\s+$ 

In Python:

import re 

lst = ['(02271) 6 79', ' 70', '\n\t\t\t', '(02271) 6 79', '\n\t\t\t\t', ' 70', '\n\t\t\t', '\n\t\t\t', '(02181) 27 0', '\n\t\t\t\t', '3-0', '\n\t\t\t', '\n\t\t\t', '(02181) 27 0', '\n\t\t\t\t', '3-0', '\n\t\t\t', '\n\t\t\t', '(02161) 24 19', '\n\t\t\t\t', ' 40', '\n\t\t\t', '\n\t\t\t', '(02161) 24 19', '\n\t\t\t\t', ' 40', '\n\t\t\t', '\n\t\t\t', '(02131) 66 67', '\n\t\t\t\t', ' 10', '\n\t\t\t', '\n\t\t\t', '(02131) 66 67', '\n\t\t\t\t', ' 10', '\n\t\t\t', '\n\t\t\t', '(02103) 39 00', '\n\t\t\t\t', ' 93', '\n\t\t\t', '\n\t\t\t', '(02103) 39 00', '\n\t\t\t\t', ' 93', '\n\t\t\t', '\n\t\t\t', '(02173) 2 04 7', '\n\t\t\t\t', '3-0', '\n\t\t\t', '\n\t\t\t', '(02173) 2 04 7', '\n\t\t\t\t', '3-0', '\n\t\t\t', '\n\t\t\t', '(02235) 9 23 04', '\n\t\t\t\t', ' 30', '\n\t\t\t', '\n\t\t\t', '(02235) 9 23 04', '\n\t\t\t\t', ' 30', '\n\t\t\t', '\n\t\t\t', '\n\t\t\t\t', '(0221) 3 46 79 40', '\n\t\t\t', '\n\t\t\t', '\n\t\t\t\t', '(0221) 3 46 79 40', '\n\t\t\t', '\n\t\t\t', '(02232) 4 23', '\n\t\t\t\t', ' 05', '\n\t\t\t', '\n\t\t\t', '(02232) 4 23', '\n\t\t\t\t', ' 05', '\n\t\t\t', '\n\t\t\t', '(0157) 86 85 74', '\n\t\t\t\t', ' 43', '\n\t\t\t', '\n\t\t\t', '(0157) 86 85 74', '\n\t\t\t\t', ' 43', '\n\t\t\t', '\n\t\t\t', '(02181) 2 78 11', '\n\t\t\t\t', ' 47', '\n\t\t\t', '\n\t\t\t', '(02181) 2 78 11', '\n\t\t\t\t', ' 47', '\n\t\t\t', '\n\t\t\t', '(02181) 47 49 0', '\n\t\t\t\t', '0-0', '\n\t\t\t', '\n\t\t\t', '(02181) 47 49 0', '\n\t\t\t\t', '0-0', '\n\t\t\t', '\n\t\t\t', '(02202) 1 88', '\n\t\t\t\t', ' 60', '\n\t\t\t', '\n\t\t\t', '(02202) 1 88', '\n\t\t\t\t', ' 60', '\n\t\t\t', '\n\t\t\t', '(0211) 23 80', '\n\t\t\t\t', ' 70', '\n\t\t\t', '\n\t\t\t', '(0211) 23 80', '\n\t\t\t\t', ' 70', '\n\t\t\t', '\n\t\t\t', '(02235) 9 23 0', '\n\t\t\t\t', '4-0', '\n\t\t\t', '\n\t\t\t', '(02235) 9 23 0', '\n\t\t\t\t', '4-0', '\n\t\t\t'] 

rx = re.compile(r'^\s+$') 

lst = [item.strip() for item in lst if not rx.match(item)] 
print(lst) 

Diese Ausbeuten und entfernt alle Zahlen, die nicht nur Leerzeichen vom Anfang bis zum Ende sind:

['(02271) 6 79', '70', '(02271) 6 79', '70', '(02181) 27 0', '3-0', '(02181) 27 0', '3-0', '(02161) 24 19', '40', '(02161) 24 19', '40', '(02131) 66 67', '10', '(02131) 66 67', '10', '(02103) 39 00', '93', '(02103) 39 00', '93', '(02173) 2 04 7', '3-0', '(02173) 2 04 7', '3-0', '(02235) 9 23 04', '30', '(02235) 9 23 04', '30', '(0221) 3 46 79 40', '(0221) 3 46 79 40', '(02232) 4 23', '05', '(02232) 4 23', '05', '(0157) 86 85 74', '43', '(0157) 86 85 74', '43', '(02181) 2 78 11', '47', '(02181) 2 78 11', '47', '(02181) 47 49 0', '0-0', '(02181) 47 49 0', '0-0', '(02202) 1 88', '60', '(02202) 1 88', '60', '(0211) 23 80', '70', '(0211) 23 80', '70', '(02235) 9 23 0', '4-0', '(02235) 9 23 0', '4-0'] 


Als @dawg po ints out, ein regulärer Ausdruck ist nicht wirklich erforderlich, tatsächlich:

+0

Danke für all eure Antworten Jungs. Ich habe sie alle ausprobiert, aber keiner hat für mich gearbeitet. Wahrscheinlich ist meine Liste nicht eine "echte" Liste? @ Jan, wenn ich die Liste "lst" verwende, die Sie definiert haben, funktioniert es. Aber wenn ich lst = phonenumbers schreibe, wird es nicht ... meine Liste wird erstellt, indem zuerst die Seite mit Qt gerendert wird und dann lxml verwendet wird, um die Liste über tree.xpath zu extrahieren: phonenumber = tree.xpath ('// span [@ class = "text nummer_ganz"] // text() ') - Website ist: geleseiten.de/schluesselfertigbau/bergheim,,,,,umkreis-5000 0/s1 – DanielHe

Verwandte Themen