2016-05-04 5 views
-4

Bitte helfen Sie mir, das Problem zu lösen. Ich habe eine große Textdatei und ich muss doppelte Zeilen entfernen. Das Problem ist, dass die Duplizierung manchmal mehrere Zeilen umfasst Zum Beispiel die ersten beiden Zeilen ist einzigartig und sie wiederholen sich dreimal. Ich muss diese Paare von wiederholten Zeilen entfernen. Ich muss Duplikate nur löschen, wenn sie nacheinander erscheinen. Die Bedingung ist vor dem Erscheinen einiger anderer Zeilen erfüllt, bedeutet, dass wir erneut die Anzahl der eindeutigen Zeilen überprüfen müssen, die wiederholt werden.Duplikate entfernen, die sich über mehrere Zeilen erstrecken

PRÜFDATEN

Testlinie 1
Testlinie 2
Testlinie 1
Testlinie 2
Testlinie 1
Testlinie 2

Einige andere Linien
...............................

Testlinie 1
Testlinie 2
Testlinie 3

Einige andere Linien
........................ .......

Testlinie 1
Testlinie 2
Testlinie 3
Testlinie 1
Testlinie 2
Testlinie 3
Testlinie 1
Testlinie 2
Testlinie 3

Einige andere Linien
..................... ..........

Testlinie 1
Testlinie 1
Testlinie 1

Einige andere Linien
...............................

Testlinie 1
Testlinie 2
Testlinie 3
Testlinie 4
Testlinie 1
Testlinie 2
Testlinie 3
Testlinie 4

Einige andere Linien
................ ...............

Erwartetes Ergebnis

Testlinie 1
Testlinie 2

Einige andere Linien
.................... ...........

Testlinie 1
Testlinie 2
Testlinie 3

Einige andere Linien
...............................

Testlinie 1
-Test Linie 2
Testlinie 3

Einige andere Linien
...............................

Testlinie 1

Einige andere Linien
...............................

Testlinie 1
Testlinie 2
Testlinie 3
Testlinie 4

Einige andere Linien
.............................. .

Jim Mischel danke für die Klärung meiner Frage. Ich habe verstanden, dass ich Beispiel gemacht habe, das nicht einfach zu verstehen ist. Ich weiß, wir können Set zum Filtern verwenden, aber es ist nicht das, was ich brauche.
Ich brauche - Entfernen Sie benachbarte doppelte Linien und Sequenzen von Linien.
Ich versuche 1,1 in 1 und 1,2,1,2,1,2 in 1,2 zu ändern, aber 1,2,3,1,2 nicht verändert werden würde. Bitte Hinweis, dass die Anzahl der wiederholten Zeilen unterschiedlich sein kann. Es kann 1,2,1,2,1,2 in 1,2 oder 1,2,3,1,2,3,1,2,3 in 1,2,3 oder 1,2,3,4,1,2,3,4,1,2,3,4 in 1,2,3,4

+0

Diejenigen, die „just-Sets verwenden“, lesen Sie bitte die Frage beantworten würde, und die Beispiele studieren. Er fragt nicht, doppelte Zeilen zu entfernen, sondern * benachbarte * doppelte Zeilen und Zeilenfolgen. Also versucht er, '1,1' in' 1' und '1,2,1,2,1,2' in' 1,2' zu verwandeln, aber '1,2,3,1,2' würde es nicht geben. t geändert werden. –

+0

Sets sind eine eingebaute Funktion von Python, es wird das Problem nicht lösen, weil dies ein logisches Problem ist, das durch korrektes Codieren gelöst werden kann. Ich werde das nicht beantworten, weil ich nicht deine Arbeit mache. Die Verwendung von Sets kann jedoch ein nützliches Werkzeug sein. –

Antwort

-1

sein Duplikate vermeiden Sie Sets verwenden können:

>>> l = [1,2,3,3,2,1,2,4] 
>>> set(l) 
set([1, 2, 3, 4]) 

Sie müssen nur „einige andere Linien“ identifizieren Linien in der Start-Warteschlangen Liste.

+0

Das wird das Problem nicht lösen. Lesen Sie die Frage erneut und studieren Sie die Beispiele. –

0

Verwenden regex die mehrzeilige wiederholt zu Singletons zu reduzieren:

import sys 
import re 

string = sys.stdin.read() 

# use pattern matching to reduce the repeated line sequences: 
# ie. does a line look like the one that follows it; does a 
# pair of lines look like the pair that follow them; etc. 
string = re.sub(r"((?:^.*\n)+)(?=\1)", "", string, flags=re.MULTILINE) 

sys.stdout.write(string) 

INPUT

Test line 1 
Test line 2 
Test line 1 
Test line 2 
Test line 1 
Test line 2 

Some other lines 1 
............................... 

Test line 1 
Test line 2 
Test line 3 

Some other lines 2 
............................... 

Test line 1 
Test line 2 
Test line 3 
Test line 1 
Test line 2 
Test line 3 
Test line 1 
Test line 2 
Test line 3 

Some other lines 3 
............................... 

Test line 1 
Test line 1 
Test line 1 

Some other lines 4 
............................... 

Test line 1 
Test line 2 
Test line 3 
Test line 4 
Test line 1 
Test line 2 
Test line 3 
Test line 4 

Some other lines 5 
............................... 

OUTPUT

Test line 1 
Test line 2 

Some other lines 1 
............................... 

Test line 1 
Test line 2 
Test line 3 

Some other lines 2 
............................... 

Test line 1 
Test line 2 
Test line 3 

Some other lines 3 
............................... 

Test line 1 

Some other lines 4 
............................... 

Test line 1 
Test line 2 
Test line 3 
Test line 4 

Some other lines 5 
............................... 
-2

können Sie SET verwenden

list_of_lines = ["line 1", "line 2", "line 3", "line 1", "line 2"] 
list_of_lines = list(set(list_of_lines)) 

Oder Sie können Ihre Linien im Satz hinzufügen.

list_of_lines = set() 
set.add("line 1") 
set.add("line 2") 
set.add("line 3") 

es wird automatisch Duplikate entfernen

+0

Das wird das Problem nicht lösen. Lesen Sie die Frage erneut und studieren Sie die Beispiele. –

Verwandte Themen