Форум сайта python.su
1
Люди добрые, поставил себе задачку на поиск совпадающих слов. Пока ищу так, как описано ниже.
Быть может кто подскажет, как без функции 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
Офлайн
насколько понял условие, можно так:
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
Офлайн
1
lorien
Задача описана невнятно.
Офлайн
1
dimy44Да, вроде срабатывает. Завтра опробую на больших списках
насколько понял условие, можно так:
Спасибо.
Офлайн
> Что именно невнятно?
Задача :)
> Нужно произвести сравнение слов и если слова совпали напечатать оба этих слова.
Что такое слово? Последовательность символов без пробела? Как искать и сравнивать слова? Например в первом списке у вас две строки, во втором списке одна строка. И я не против подсказать как сделать, но сама задача мне не понятна. Если вы туманно описываете задачу, то и решение может быть для вас оказаться в тумане.
Офлайн
1
Хе-хе.
В общем есть два списка слов, нужно в них найти совпадающие слова. Так более понятно? 
Офлайн
568
#!/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)
Офлайн
Задача действительно была поставлена несколько туманна, ведь AC Python и Python GO считалось совпадением, а Mini GO и Python GO - нет, из чего я сделал вывод, что одна из строк должна начинаться на общее слово и дал такой пример. А иначе пример был бы другой.
Офлайн
18
paramanНепонятно. Если нужно искать пересечение всех слов из первого списка, то пересекаемых слов будет 2:
В общем есть два списка слов, нужно в них найти совпадающие слова. Так более понятно?
'Python', 'GO'
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)
Офлайн