Найти - Пользователи
Полная версия: Удалить дубликаты строк
Начало » Python для новичков » Удалить дубликаты строк
1 2
Seganapa
Всем привет!
Понадобилось в большом файле удалить повторяющиеся строки.
Нагуглил такой код:

#! /usr/bin/env python
input = open('in.txt', 'r')
output = open('out.txt', 'w')
linesarray = input.readlines()
input.close()
seen = []
for i in range(len(linesarray)):
    if seen.count(linesarray[i]) == 0:
        seen.append(linesarray[i])
        output.write(linesarray[i])
 output.close()

Работает вроде бы правильно, но не могу вьехать КАК? Где тут проверка?
  if seen.count(linesarray[i]) == 0:
Но как она работает? В чем хитрость?
Singularity
Seganapa
ты не знаешь что делает count?
Seganapa
Я знаю что делает count, но как это помогает сравнить строки? По количеству символов что ли?
FishHook
Seganapa
Я знаю что делает count, но как это помогает сравнить строки? По количеству символов что ли?
Ты же в список строки добавляешь, поэтому count возвращает количество строк в списке.

Это плохой алгоритм.
Seganapa
Ну я так и подумал. Т.е. Если так получится что в двух строках будут разные слова но одинаковое количество символов, то строки будут считаться одинаковыми. Я прав? Подтвердите мои подозрения ))

В таком случае этот алгоритм мне не подходит. Как правильно сделать?
Hyyudu
А вы код проверили, прежде чем клеймить? На мой взгляд, он совершеннно правильный
  if seen.count(linesarray[i]) == 0: # в списке seen нет строки linesarray[i]
Вы не перепутали count с len?
py.user.next
Seganapa
Как правильно сделать?
Добавлять во множество хеши строк.
ilnur
а так не лучше?

#! /usr/bin/env python
input = open('in.txt', 'r')
output = open('out.txt', 'w')
linesarray = input.readlines()
input.close()
seen = []
for line in linesarray:
    if line not in seen:
        seen.append(line)    
 output.writelines(seen)
Seganapa
Теперь все стало понятно! Спасибо всем огромное!!!
FishHook
Честно говоря, идея сравнения строк мне не нравится. Что если попробовать хранить строки в словаре с ключом - хеш строки?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB