Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2012 14:00:43

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

Поиск на совпадение слов

Люди добрые, поставил себе задачку на поиск совпадающих слов. Пока ищу так, как описано ниже.
Быть может кто подскажет, как без функции replace, найти совпадения AC Python и Python GO?

import re
name = [('AC Python'), ('Mini GO')]
name2 = [('Python GO')]
for name_i in name:
    m = re.search(name_i, name2[0])
    t = re.search(name2[0], name_i)
    k = name_i.find(name2[0])
    z =name2[0].find(name_i)
    if name2[0] == name_i:
        print name2, name_i
    if z > 0:
        print name2, name_i
    if k > 0:
        print name2, name_i
    if m:
        print name2, name_i
    if t:
        print name2, name_i

Офлайн

#2 Ноя. 14, 2012 17:57:45

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Поиск на совпадение слов

насколько понял условие, можно так:

n = ['AC Python', 'Mini GO']
n2 = ['Python GO']
for x in n:
    for y in n2:
        for i in x.split():
            if y.startswith(i):
                print (x, y)
                break
        else:
            for i in y.split():
                if x.startswith(i):
                    print (x, y)
                    break

Офлайн

#3 Ноя. 14, 2012 20:07:37

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск на совпадение слов

Задача описана невнятно.

Офлайн

#4 Ноя. 14, 2012 20:19:55

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

Поиск на совпадение слов

lorien
Задача описана невнятно.

Что именно невнятно? Нужно произвести сравнение слов и если слова совпали напечатать оба этих слова.

Офлайн

#5 Ноя. 14, 2012 20:20:36

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

Поиск на совпадение слов

dimy44
насколько понял условие, можно так:
Да, вроде срабатывает. Завтра опробую на больших списках Спасибо.

Офлайн

#6 Ноя. 14, 2012 20:50:35

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск на совпадение слов

> Что именно невнятно?
Задача :)

> Нужно произвести сравнение слов и если слова совпали напечатать оба этих слова.
Что такое слово? Последовательность символов без пробела? Как искать и сравнивать слова? Например в первом списке у вас две строки, во втором списке одна строка. И я не против подсказать как сделать, но сама задача мне не понятна. Если вы туманно описываете задачу, то и решение может быть для вас оказаться в тумане.

Офлайн

#7 Ноя. 15, 2012 06:32:25

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

Поиск на совпадение слов

Хе-хе.
В общем есть два списка слов, нужно в них найти совпадающие слова. Так более понятно?

Офлайн

#8 Ноя. 15, 2012 07:01:27

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

Поиск на совпадение слов

#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = ['AC Python', 'Mini GO', 'IronPython .NET', 'F# .Net Good']
name2 = ['Python GO', 'Java AC', 'C# .Net Good', 'VB .Net', 'PHP Shit']
splited_name, splited_name2=map(lambda x:[set(i.split()) for i in x], (name, name2))
for n in splited_name:
    for n2 in splited_name2:
        s= n.intersection(n2)
        if s:
            print ' '.join(n)+' ---> '+' '.join(n2)+' ==== '+','.join(s)



Отредактировано FishHook (Ноя. 15, 2012 07:03:32)

Офлайн

#9 Ноя. 15, 2012 09:21:51

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Поиск на совпадение слов

Задача действительно была поставлена несколько туманна, ведь AC Python и Python GO считалось совпадением, а Mini GO и Python GO - нет, из чего я сделал вывод, что одна из строк должна начинаться на общее слово и дал такой пример. А иначе пример был бы другой.

Офлайн

#10 Ноя. 15, 2012 09:50:13

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

paraman
В общем есть два списка слов, нужно в них найти совпадающие слова. Так более понятно?
Непонятно. Если нужно искать пересечение всех слов из первого списка, то пересекаемых слов будет 2:
'Python', 'GO'

FishHook
Если списки большие, то лучше из них сделать по множеству:
def make_set(names):
      return set(itertools.chain(*map(lambda x: x.split(), names)))
name = ['AC Python', 'Mini GO', 'IronPython .NET', 'F# .Net Good']
name2 = ['Python GO', 'Java AC', 'C# .Net Good', 'VB .Net', 'PHP Shit']
names1, names2 = map(make_set, (name, name2))
repeated_names = names1.intersection(names2)

Отредактировано adray (Ноя. 15, 2012 09:53:02)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version