diff --git a/filter_map/filter_map.py b/filter_map/filter_map.py index a27f9ae..3c3f524 100644 --- a/filter_map/filter_map.py +++ b/filter_map/filter_map.py @@ -15,4 +15,10 @@ def filter_map(func: Callable[[Any], Tuple[bool, Any]], input_array: List[Any]) :param input_array: Исходный список. :return: Отфильтрованный список. """ - pass + + filtered_list = [] + for item in input_array: + flag, value = func(item) + if flag: + filtered_list.append(value) + return filtered_list diff --git a/lists/lists.py b/lists/lists.py index 04d850f..f12b78f 100644 --- a/lists/lists.py +++ b/lists/lists.py @@ -8,7 +8,16 @@ def replace(input_list: list[int]) -> list[int]: :param input_list: Исходный список :return: Список с замененными элементами """ - pass + if not input_list: + return input_list + max_value = input_list[0] + for items in input_list: + if items > max_value: + max_value = items + replaced_list = list( + map(lambda replaced: max_value if replaced > 0 else replaced, input_list) + ) + return replaced_list @staticmethod def search(input_list: list[int], query: int) -> int: @@ -20,4 +29,21 @@ def search(input_list: list[int], query: int) -> int: :param query: Искомый элемент :return: Номер элемента """ - pass + if len(input_list) == 0: + return -1 + + mid = len(input_list) // 2 + + if input_list[mid] == query: + return mid + + elif query < input_list[mid]: + return ListExercise.search(input_list[:mid], query) + + else: + new_mid = mid + 1 + result = ListExercise.search(input_list[new_mid:], query) + if result == -1: + return -1 + else: + return mid + 1 + result diff --git a/maps/maps.py b/maps/maps.py index dd5d560..4496f00 100644 --- a/maps/maps.py +++ b/maps/maps.py @@ -13,7 +13,16 @@ def rating(list_of_movies: list[dict]) -> float: Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country :return: Средний рейтинг фильмов у которых две или больше стран """ - pass + more_2_countries_movies = [] + for movie in list_of_movies: + if ( + movie["rating_kinopoisk"] + and float(movie["rating_kinopoisk"]) != 0 + and len(movie["country"].split(",")) >= 2 + ): + more_2_countries_movies.append(movie) + rating = map(lambda movie: float(movie["rating_kinopoisk"]), more_2_countries_movies) + return sum(rating) / len(list(more_2_countries_movies)) @staticmethod def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int: @@ -28,4 +37,9 @@ def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int: :return: Количество букв 'и' в названиях всех фильмов с рейтингом больше или равным заданному значению """ - pass + rating_movies = [] + for movie in list_of_movies: + if movie["rating_kinopoisk"] and float(movie["rating_kinopoisk"]) >= rating: + rating_movies.append(movie) + letters = map(lambda movie: movie["name"].count("и"), rating_movies) + return sum(letters)