Wykrywanie duplikatów w pliku TXT

0

Witam. Mam plik .txt zawiera kilkaset linii nic nie znaczących słów, i muszę policzyć te linie które nie zawierają duplikatów. Na początku myślałem o wpisywanie je w linie, i porównywanie ich z tą samą zmienną przekształconą w set. Ale to kilka godzin pracy a według zadania można to zrobić w miarę szybko. Jest jakiś sposób by Python znalazł te linie i policzył

0

Czemu kilka godzin? Dla każdej linii, Wrzucasz każdy wyraz do zbioru i jak do końca nie będzie duplikatu, to Inkrementujesz licznik i Przechodzisz do następnej. Złożoność będzie O(n), gdzie n to liczba wyrazów.

0

A nie wymagało by to refaktoryzacji linii? Trzeba każde słowo oznaczyć cudzysłowami inaczej python nie będzie tego obsługiwać. Trzeba by kopiować, refaktoryzować, sprawdzać, i od nowa.

2

To jak to się ładnie mieści w pamięci, to Możesz zrobić tak:

with open('data.txt') as f:
	data = [x.split() for x in f]

print(data)

Teraz Masz te linie, jako listę list wyrazów, stringów.

0

Dzięki. Twojego skryptu brakowało. dorzuciłem pętle

x = 0
for elem in data:

    if len(elem) == len(set(elem)):
        x += 1
print(x)

i policzyło.

0

Możesz napisać ten program dużo lepiej:

> time python3 szopen.py
923800
5.58user 0.40system 0:06.00elapsed 99%CPU (0avgtext+0avgdata 852240maxresident)k
...
> time python3 mozg.py <big10.txt
923800
4.85user 0.02system 0:04.89elapsed 99%CPU (0avgtext+0avgdata 6652maxresident)k
...
> 

I tradycyjnie, jedna linia AWK:

> time awk '{ delete a; for (i = 1; i <= NF; ++i) if (a[$i]++) next; ++c }; END { print 0 + c }' <big10.txt
923800
1.94user 0.02system 0:01.97elapsed 99%CPU (0avgtext+0avgdata 944maxresident)k
...
> 

1 użytkowników online, w tym zalogowanych: 0, gości: 1