Форум сайта python.su
Никак не получается реализовать данный метод для поиска слова ‘was’ в предложении:
Используя функцию reduce, реализуйте код, который считает, сколько раз слово was встречается в списке:
sentences = “Nory was a Catholic”, “because her mother was a Catholic”, “and Nory’s mother was a Catholic”, “because her father was a Catholic”, “and her father was a Catholic”, “because his mother was a Catholic”, “or had been”
Моё решение не выдаёт ошибку:
from functools import reduce from typing import List def count(): return print(1) sentences = "Nory was a Catholic", "because her mother was a Catholic", "and Nory’s mother was a Catholic", "because her father was a Catholic", "and her father was a Catholic", "because his mother was a Catholic", "or had been" list1 = str(sentences) list1 = list1.split() char = 'was' count = 0 was = reduce(lambda x,y: x == 'was', filter(lambda y: y == 'was', sentences)) print(was)
Отредактировано FishHook (Янв. 14, 2022 10:24:28)
Офлайн
from functools import reduce sentences = "Nory was a Catholic", "because her mother was a Catholic", "and Nory’s mother was a Catholic", "because her father was a Catholic", "and her father was a Catholic", "because his mother was a Catholic", "or had been" res = reduce(lambda a, b: a + b, map(lambda i: 1 if 'was' in i else 0, sentences)) print(res)
Онлайн
xam1816
ваша программа не будет работать правильно, если в одном предложени будет больше одного слова was
John441
Моё решение не выдаёт ошибку:в вашем решении нет ни одной правильной строки, это просто нагромождение ерунды
from functools import reduce sentences = ["Nory was a Catholic", "because her mother was a Catholic", "and Nory's mother was a Catholic", "because her father was a Catholic", "and her father was a Catholic", "because his mother was a Catholic", "or had been"] def words(lst): for sentence in lst: for w in sentence.split(): yield w words_generator = words(sentences) was_count = reduce(lambda a, b: a + b, (1 for w in words_generator if w == 'was'), 0) print(was_count)
Отредактировано FishHook (Янв. 14, 2022 11:39:52)
Офлайн
FishHook
ваша программа не будет работать правильно, если в одном предложени будет больше одного слова was
res = reduce(lambda a, b: a + b, [i.lower().split().count('was') for i in sentences])
[i.lower().split().count('was') for i in sentences]
map(lambda i: i.lower().split().count('was'), sentences)
Онлайн
xam1816
а зачем вам список то? map у вас был генератором, то есть он не занимает практически нисколько памяти и не отнимает процессорное время на построение вектора и связанные с этим копирования памяти и аллокации. Вам же не нужен список, вы не собираетесь его переиспользовать, ну так и юзайте генератор
Офлайн
FishHook
а зачем вам список то? map у вас был генератором
print(type([i.lower().split().count('was') for i in sentences])) # <class 'list'> print(type((i.lower().split().count('was') for i in sentences)))# <class 'generator'>
Онлайн
> Используя функцию reduce, реализуйте код, который считает, сколько раз слово was встречается в списке:
Мсье который придумал использовать свёртки для подсчёта слов определённо знает толк в извращениях…
>>> reduce(lambda x, y: x + (1 if y == "was" else 0), "Nory was a Catholic was".split(), 0) 2
Офлайн