Проверка на вхождение элемента в массив с выводом наибольшего по совпадению из них. Python
Я масленок, в коде. К делу.
Вопрос: у меня есть слово и массив - как вывести предложение из массива которое содержит наибольшее кол-во совпадений данного слова из переменной? Т.е. как выдать второй элемент.
Я думал перевести в три массива потом посчитать, и вывести максимальное кол-во, но понял что это мне ничего не даст.) Да и это не работает, т.к. TypeError: 'int' object is not iterable. Но даже когда я перевожу в интеджер это не работает.)
testWord = "погода"
secondTestWord = ["интересная погода", "эта погода - лучшая погода", "хорошая погода"]
for someValue in secondTest:
three = someValue.split()
coinsidences = threeArrays.count(testWord)
result = max(coinsidences)
print(result)
И еще вопрос. Что если например, переменная будет массивом и там будет два элемента, и смысл такой же, вывести из второго элемент где больше всего совпадений? Т.е.:
testWord = ["один", "два"]
secondTestWord = ["один два три", "один два два", "один"]
Прошу помощи, если можно пожалуйста с разъяснением, буду очень благодарен вам.)
Ответы (2 шт):
как вывести предложение из массива которое содержит наибольшее кол-во совпадений данного слова из переменной? Т.е. как выдать второй элемент.
Алгоритм:
- Подсчитываем длину первого текста и запоминаем длину и индекс
- Итерируем список начиная со второго элемента
- Сравниваем максимальную длину с текущей и обновляем их если нужно
- Выводим результат
Пример:
test_word = "погода"
words = ["интересная погода", "эта погода - лучшая погода", "хорошая погода"]
max_index = 0
max_number = words[0].count(test_word)
for i in range(1, len(words)):
text = words[i]
number = text.count(test_word)
if number > max_number:
max_number = number
max_index = i
print(words[max_index])
# эта погода - лучшая погода
И еще вопрос. Что если например, переменная будет массивом и там будет два элемента, и смысл такой же, вывести из второго элемент где больше всего совпадений?
Алгоритм тот же, просто адаптируйте проверку, подсчитывая сумму совпадений.
Пример:
test_word = ["один", "два"]
words = ["один два три", "один два два", "один"]
max_index = 0
max_number = sum(words[0].count(word) for word in test_word)
for i in range(1, len(words)):
text = words[i]
number = sum(text.count(word) for word in test_word)
if number > max_number:
max_number = number
max_index = i
print(words[max_index])
# один два два
В качестве альтернативы предложенному в ответе gil9red варианту, можно использовать с reduce:
from functools import reduce
testWord = "погода"
secondTestWord = ["интересная погода", "эта погода - лучшая погода", "хорошая погода"]
r = ' '.join(reduce(
lambda a,b: a if (a.count(testWord)> b.count(testWord)) else b,
[t.split(' ' ) for t in secondTestWord]
))
print(r)