Найти - Пользователи
Полная версия: Поиск на совпадение слов
Начало » Python для новичков » Поиск на совпадение слов
1 2 3
paraman
Люди добрые, поставил себе задачку на поиск совпадающих слов. Пока ищу так, как описано ниже.
Быть может кто подскажет, как без функции 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
dimy44
насколько понял условие, можно так:
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
lorien
Задача описана невнятно.
paraman
lorien
Задача описана невнятно.

Что именно невнятно? Нужно произвести сравнение слов и если слова совпали напечатать оба этих слова.
paraman
dimy44
насколько понял условие, можно так:
Да, вроде срабатывает. Завтра опробую на больших списках Спасибо.
lorien
> Что именно невнятно?
Задача :)

> Нужно произвести сравнение слов и если слова совпали напечатать оба этих слова.
Что такое слово? Последовательность символов без пробела? Как искать и сравнивать слова? Например в первом списке у вас две строки, во втором списке одна строка. И я не против подсказать как сделать, но сама задача мне не понятна. Если вы туманно описываете задачу, то и решение может быть для вас оказаться в тумане.
paraman
Хе-хе.
В общем есть два списка слов, нужно в них найти совпадающие слова. Так более понятно?
FishHook
#!/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)
dimy44
Задача действительно была поставлена несколько туманна, ведь AC Python и Python GO считалось совпадением, а Mini GO и Python GO - нет, из чего я сделал вывод, что одна из строк должна начинаться на общее слово и дал такой пример. А иначе пример был бы другой.
adray
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)
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