Найти - Пользователи
Полная версия: Реализация метода reduce
Начало » Python для новичков » Реализация метода reduce
1
John441
Никак не получается реализовать данный метод для поиска слова ‘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)
xam1816
 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)
FishHook
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)
xam1816
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)
FishHook
xam1816
а зачем вам список то? map у вас был генератором, то есть он не занимает практически нисколько памяти и не отнимает процессорное время на построение вектора и связанные с этим копирования памяти и аллокации. Вам же не нужен список, вы не собираетесь его переиспользовать, ну так и юзайте генератор
xam1816
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'>
все понял
я думал что в круглых скобках он превратится в кортеж
Rodegast
> Используя функцию reduce, реализуйте код, который считает, сколько раз слово was встречается в списке:

Мсье который придумал использовать свёртки для подсчёта слов определённо знает толк в извращениях…
 >>> reduce(lambda x, y: x + (1 if y == "was" else 0), "Nory was a Catholic was".split(), 0)
2
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