Как проверить, упорядочены ли два слова в python

1

что это за способ проверить, записаны ли два слова в предложении и сколько раз это происходит в python. Например: мне нравится есть маки суши, а лучшие суши - в Японии. слова: [маки, суши]

Благодарю.

Код

import re

x="I like to eat maki sushi and the best sushi is in Japan"
x1 = re.split('\W+',x)
l1 = [i for i,m in enumerate(x1) if m == "maki"]
l2 = [i for i,m in enumerate(x1) if m == "sushi"]


ordered = []
for i in l1:
    for j in l2: 
        if j == i+1:
            ordered.append((i,j))

print ordered
  • 5
    любую попытку кода вы могли бы предоставить себе?
  • 1
    добавлено, но не эффективно
Показать ещё 2 комментария
Теги:

6 ответов

1
Лучший ответ

В соответствии с добавленным кодом вы подразумеваете, что слова смежны?

Почему бы просто не собрать их вместе:

print len(re.findall(r'\bmaki sushi\b', sent)) 
  • 0
    Нет, значит ОП по порядку, поэтому этот ответ бесполезен.
  • 0
    @gizmo говорит "если j == я + 1"
Показать ещё 1 комментарий
1
def ordered(string, words):
    pos = [string.index(word) for word in words]
    return pos == sorted(pos)

s = "I like to eat maki sushi and the best sushi is in Japan"
w =  ["maki", "sushi"]
ordered(s, w) #Returns True.

Не совсем самый эффективный способ сделать это, но проще понять.

  • 1
    зачем использовать 'assert', если order уже возвращает bool?
  • 0
    просто чтобы доказать, что он работает нормально, приведенный пример ДОЛЖЕН вернуть True. Утверждаю только, чтобы показать, что это не терпит неудачу
Показать ещё 3 комментария
1
s = 'I like to eat maki sushi and the best sushi is in Japan'

проверить заказ

indices = [s.split().index(w) for w in ['maki', 'sushi']]
sorted(indices) == indices

как считать

s.split().count('maki')

Примечание (на основе обсуждения ниже):

предположим, что предложение "Мне нравится маким больше, чем суши или маки". Понимая, что маким - другое слово, чем маки, слово maki помещается после суши и встречается только один раз в предложении. Чтобы обнаружить это и правильно подсчитать, предложение должно быть разделено на пробелы на фактические слова.

  • 0
    Это слишком сложно?
  • 0
    отредактировал: только что увидел, я поставил отсортированный (), где он не принадлежит ...
Показать ещё 4 комментария
0

Регулярное решение :)

import re
sent = 'I like to eat maki sushi and the best sushi is in Japan'
words = sorted(['maki', 'sushi'])
assert re.search(r'\b%s\b' % r'\b.*\b'.join(words), sent)
  • 0
    Бах миру нужно меньше
  • 0
    Форматирование% s менее перспективно, учитывая более новый метод string.format ()
0

если res> 0: слова сортируются в предложении

words = ["sushi", "maki", "xxx"]
sorted_words = sorted(words)
sen = " I like to eat maki sushi and the best sushi is in Japan xxx";
ind = map(lambda x : sen.index(x), sorted_words)
res = reduce(lambda a, b: b-a, ind)
0

Просто и идея, возможно, потребуется дополнительная работа

(sentence.index('maki') <= sentence.index('sushi')) == ('maki' <= 'sushi')
  • 0
    Как насчет нескольких слов?
  • 0
    index() даст вам самый низкий индекс. Это также вызовет ValueError если слово отсутствует в строке. Это будет работать только для самых простых случаев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню