Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2011 15:51:48

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

сравнение библиотек, состоящих из текстовых строк

Доброго времени суток! помогите с задачкой на Питоне пожалуйста…
Суть задачи в том, что есть два текстовых файла, состоящие из нескольких строк (слова разделены пробелами и табуляциями, которые не являются словами, т.е. слово не может быть нулевой длины). Нужно написать скрипт, который сравнивает эти два файла независимо от порядка слов, и выводит сообщение что файлы либо идентичны (т.е. в них одни и те же слова), либо нет. в случае если они не идентичны, вывести те слова что есть в первом, и нет во втором… и те, которые есть во втором, но нет в первом.
Реализовать нужно не сравнением строк, а как массив… т.е. использовать библиотеки.
файлы которые нужно сравнить лежат тут http://files.mail.ru/1EFLEZ (там три возможных варианта, с учетом равенства или неравенства файлов.
начала писать код, дошла до вывода элементов словарей и тут же начались проблемы… выводит не по русски в в виде символов.

# -*- coding: utf-8 -*-
import os;
import codecs;

dict1 = {}
with open ('01.txt','r') as f:
for str in f:
dict1[str.rstrip()] = 1
print dict1

dict2 = {}
with open ('02.txt','r') as f:
for str in f:
dict2[str.rstrip()] = 1
print dict2
ну и дальнейший алгоритм как реализовать не представляю :((( видимо нужно использовать key но как сравнить каждое слово в строке каждой библиотеки? помогите плиз… :(



Офлайн

#2 Янв. 26, 2011 16:24:28

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

сравнение библиотек, состоящих из текстовых строк

Посмотрите на множества – set.



Офлайн

#3 Янв. 26, 2011 19:40:54

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

сравнение библиотек, состоящих из текстовых строк

а без set это воплотить не реально? у меня не получается даже вывести по-русски словари… :(
я так поняла что нужно сравнивать каждую букву как элемент массива и искать пробелы как разделители слов… каким-то образом.



Офлайн

#4 Янв. 26, 2011 19:59:48

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

сравнение библиотек, состоящих из текстовых строк

s1 = set(open('01.txt').read().split())
s2 = set(open('02.txt').read().split())
if s1==s2:
print 'equal'
else:
print " ".join(s1-s2)
print " ".join(s2-s1)



Офлайн

#5 Янв. 26, 2011 20:35:24

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

сравнение библиотек, состоящих из текстовых строк

спасибо огромное!!! работает!
но все-таки вариант без использования set придется додумывать… будет громоздко конечно, но хотят чтобы не было встроенных функций… :(



Офлайн

#6 Янв. 26, 2011 20:41:59

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

сравнение библиотек, состоящих из текстовых строк

murus
хотят чтобы не было встроенных функций…
это не функция - это ТИП (type) данных
>>> `set`
"<type 'set'>"
>>> `map`
'<built-in function map>'
>>>
так это можно доказать :)



Отредактировано (Янв. 26, 2011 20:43:08)

Офлайн

#7 Янв. 26, 2011 20:51:19

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

сравнение библиотек, состоящих из текстовых строк

попробую доказать))) хотя split и join это ведь уже функции (или методы)?

в общем хочется узнать как это можно сделать в том числе и простым перебором))



Офлайн

#8 Янв. 27, 2011 01:10:38

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

сравнение библиотек, состоящих из текстовых строк

set не просто входит в стандартную библиотеку питона, но и является встроенным типом, так же как dict, list и прочие. Т.е. если нельзя юзать set, то либо должно быть прямое указание на то, что можно юзать, либо это полный бред, ибо эти типы равнозначны с точки зрения “чтобы не было встроенных функций”.



Офлайн

#9 Янв. 27, 2011 09:27:46

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

сравнение библиотек, состоящих из текстовых строк

join и split это не функции, а методы. Так что можешь не волноваться. :D



Офлайн

#10 Янв. 27, 2011 09:45:43

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

сравнение библиотек, состоящих из текстовых строк

тогда уже и open на file заменить придется :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version