Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2014 08:42:50

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Всем привет!
Понадобилось в большом файле удалить повторяющиеся строки.
Нагуглил такой код:

#! /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:
Но как она работает? В чем хитрость?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#2 Июль 18, 2014 08:57:22

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Seganapa
ты не знаешь что делает count?

Офлайн

#3 Июль 18, 2014 09:03:08

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Я знаю что делает count, но как это помогает сравнить строки? По количеству символов что ли?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#4 Июль 18, 2014 09:41:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Seganapa
Я знаю что делает count, но как это помогает сравнить строки? По количеству символов что ли?
Ты же в список строки добавляешь, поэтому count возвращает количество строк в списке.

Это плохой алгоритм.



Офлайн

#5 Июль 18, 2014 10:10:48

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

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

В таком случае этот алгоритм мне не подходит. Как правильно сделать?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#6 Июль 18, 2014 10:21:06

Hyyudu
Зарегистрирован: 2014-07-15
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

А вы код проверили, прежде чем клеймить? На мой взгляд, он совершеннно правильный

  if seen.count(linesarray[i]) == 0: # в списке seen нет строки linesarray[i]
Вы не перепутали count с len?

Отредактировано Hyyudu (Июль 18, 2014 10:22:11)

Офлайн

#7 Июль 18, 2014 10:22:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Seganapa
Как правильно сделать?
Добавлять во множество хеши строк.



Офлайн

#8 Июль 18, 2014 10:37:41

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

а так не лучше?

#! /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)

Офлайн

#9 Июль 18, 2014 10:48:32

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Теперь все стало понятно! Спасибо всем огромное!!!



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#10 Июль 18, 2014 12:05:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить дубликаты строк

Честно говоря, идея сравнения строк мне не нравится. Что если попробовать хранить строки в словаре с ключом - хеш строки?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version