Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 11, 2011 04:25:38

studer_fkhv
От:
Зарегистрирован: 2011-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

Всем доброго времени суток, хотел узнать, каким образом оптимальнее сравнить два текстовых файла (по сути словаря, в каждом по 500,000 строк) на предмет наличия в них одинаковых слов. Прошу прощения, если не корректно ставлю вопрос, все-таки в программировании не силен, интересует, что лучше использовать списки, словари и какие функции для их обработки?



Офлайн

#2 Апрель 11, 2011 07:38:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

А у вас слова в файлах отсортированы? Если да - то ни списков ни словарей не нужно. Если нет - проще воспользоваться словарем - загрузить меньший их двух файлов - второй читать и проверять наличие слова. Гарантировать оптимальность не могу, но есть много способов сделать работу намного медленнее. Кстати много зависит еще от того как вы будете читать слова из файла.



Офлайн

#3 Апрель 11, 2011 08:01:46

studer_fkhv
От:
Зарегистрирован: 2011-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

Я так сравниваю на данный момент:

for word in open('english10.dic',"r"):
for decode in open('decode_SLVTSSDADP.txt',"r"):
if decode == word:
print 'Найдено совпадение: ',decode
print ' Проверка завершена.'



Офлайн

#4 Апрель 11, 2011 08:12:27

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

wordset=set([decode in open('decode_SLVTSSDADP.txt',"r")])
for word in open('english10.dic',"r"):
if word in wordset:
print 'Найдено совпадение: ',decode
print ' Проверка завершена.'
Былобы интересно насколько отличаются способы по быстродействию если будете сравнивать отпишитесь пожалуйста.



Офлайн

#5 Апрель 11, 2011 10:42:38

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

ну явно видно что код у тс читает файл decode_SLVTSSDADP.txt сколько слов в english10.dic :) что не есть тру



Офлайн

#6 Апрель 12, 2011 00:26:06

studer_fkhv
От:
Зарегистрирован: 2011-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

sp3
ну явно видно что код у тс читает файл decode_SLVTSSDADP.txt сколько слов в english10.dic :) что не есть тру
Поподробнее можно, не понимаю о чем речь, ведь каждое слово из english10.dic ищется на соответсвие в decode..txt



Офлайн

#7 Апрель 12, 2011 12:28:09

studer_fkhv
От:
Зарегистрирован: 2011-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

doza_and
Былобы интересно насколько отличаются способы по быстродействию если будете сравнивать отпишитесь пожалуйста.
Я в шоке, дополнил скрипт таймером и сравнил:
from timeit import timeit

def compare():
for word in open('english10.dic',"r"):
for decode in open('decode_SLVTSSDADP.txt',"r"):
if decode == word:
print 'Найдено совпадение: ',decode

compare()
print 'Status ...OK'
print(timeit('compare()','from _main__ import compare',number = 1))
Время выполнения 2801.22383886
По вашему варианту с использованием множеств вместо списка : 0.320396545122
Только надо было поправить чуток:
wordset=set([DECODE FOR decode in open('decode_SLVTSSDADP.txt',"r")])
В 9000 раз быстрее, это круть:cool:



Отредактировано (Апрель 12, 2011 12:28:50)

Офлайн

#8 Апрель 12, 2011 13:32:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

Рад был оказать содействие, извините что была ошибочка я просто не запускал - изложил идею.



Офлайн

#9 Апрель 16, 2011 12:36:56

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

каким способом лучше сравнить два файла?

ТСу срочно читать, что такое класс сложности.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version