From 6ceeafccb3816df7d9977cd10137569a45c920a1 Mon Sep 17 00:00:00 2001 From: mariia-anisimova Date: Fri, 14 Jul 2023 19:39:38 +0200 Subject: [PATCH 1/3] Add def replace and search --- lists/lists.py | 38 ++++++++++++++++++++++++++++++++++++-- lists/test_lists.py | 3 +-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/lists/lists.py b/lists/lists.py index 04d850f..6fc9589 100644 --- a/lists/lists.py +++ b/lists/lists.py @@ -1,4 +1,5 @@ class ListExercise: + @staticmethod def replace(input_list: list[int]) -> list[int]: """ @@ -8,7 +9,30 @@ def replace(input_list: list[int]) -> list[int]: :param input_list: Исходный список :return: Список с замененными элементами """ - pass + + if input_list: + max_numb = input_list[0] + for value in input_list[1::]: + if value > max_numb: + max_numb = value + + for position, value in enumerate(input_list): + if value > 0: + input_list[position] = max_numb + + return input_list + + @staticmethod + def binary_search(sorted_list: list[int], left: int, right: int, query: int) -> object: + if left > right: + return -1 + mid = (left + right) // 2 + if query == sorted_list[mid]: + return mid + elif query < sorted_list[mid]: + return ListExercise.binary_search(sorted_list, left, mid - 1, query) + else: + return ListExercise.binary_search(sorted_list, mid + 1, right, query) @staticmethod def search(input_list: list[int], query: int) -> int: @@ -20,4 +44,14 @@ def search(input_list: list[int], query: int) -> int: :param query: Искомый элемент :return: Номер элемента """ - pass + if input_list: + input_list.sort() + (left, right) = (0, len(input_list) - 1) + index = ListExercise.binary_search(input_list, left, right, query) + if index != -1: + return index + else: + return index + else: + return -1 + diff --git a/lists/test_lists.py b/lists/test_lists.py index 7da0c76..cbde105 100644 --- a/lists/test_lists.py +++ b/lists/test_lists.py @@ -4,7 +4,7 @@ class TestListExercise: - @pytest.mark.skip(reason="ListExercise.replace is not implemented") + def test_replace(self) -> None: input_list = [3, 2, -8, 4, 100, -6, 7, 8, -99] replaced_list = ListExercise.replace(input_list) @@ -18,7 +18,6 @@ def test_replace(self) -> None: replaced_list = ListExercise.replace(input_list) assert replaced_list == [] - @pytest.mark.skip(reason="ListExercise.search is not implemented") def test_search(self) -> None: assert ListExercise.search([1], 900) == -1 assert ListExercise.search([1], 1) == 0 From 0f6700e0a2116e3bc0e055d62e46aca7acb1dcf1 Mon Sep 17 00:00:00 2001 From: mariia-anisimova Date: Fri, 14 Jul 2023 20:04:01 +0200 Subject: [PATCH 2/3] Fix lint --- lists/lists.py | 8 +++----- lists/test_lists.py | 3 --- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lists/lists.py b/lists/lists.py index 6fc9589..8b22ee4 100644 --- a/lists/lists.py +++ b/lists/lists.py @@ -1,5 +1,4 @@ class ListExercise: - @staticmethod def replace(input_list: list[int]) -> list[int]: """ @@ -23,16 +22,16 @@ def replace(input_list: list[int]) -> list[int]: return input_list @staticmethod - def binary_search(sorted_list: list[int], left: int, right: int, query: int) -> object: + def binary_search(sorted_list: list[int], left: int, right: int, query: int) -> int: if left > right: return -1 mid = (left + right) // 2 if query == sorted_list[mid]: return mid elif query < sorted_list[mid]: - return ListExercise.binary_search(sorted_list, left, mid - 1, query) + return int(ListExercise.binary_search(sorted_list, left, mid - 1, query)) else: - return ListExercise.binary_search(sorted_list, mid + 1, right, query) + return int(ListExercise.binary_search(sorted_list, mid + 1, right, query)) @staticmethod def search(input_list: list[int], query: int) -> int: @@ -54,4 +53,3 @@ def search(input_list: list[int], query: int) -> int: return index else: return -1 - diff --git a/lists/test_lists.py b/lists/test_lists.py index cbde105..a8ac46c 100644 --- a/lists/test_lists.py +++ b/lists/test_lists.py @@ -1,10 +1,7 @@ -import pytest - from .lists import ListExercise class TestListExercise: - def test_replace(self) -> None: input_list = [3, 2, -8, 4, 100, -6, 7, 8, -99] replaced_list = ListExercise.replace(input_list) From 8bf2eb72cea7f6a94f9d7c922d66fcbe6bf4f3c6 Mon Sep 17 00:00:00 2001 From: mariia-anisimova Date: Fri, 1 Sep 2023 15:04:07 +0200 Subject: [PATCH 3/3] Fixed bugs after review --- lists/lists.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lists/lists.py b/lists/lists.py index 8b22ee4..7dcda2d 100644 --- a/lists/lists.py +++ b/lists/lists.py @@ -11,7 +11,7 @@ def replace(input_list: list[int]) -> list[int]: if input_list: max_numb = input_list[0] - for value in input_list[1::]: + for value in input_list[1:]: if value > max_numb: max_numb = value @@ -45,11 +45,8 @@ def search(input_list: list[int], query: int) -> int: """ if input_list: input_list.sort() - (left, right) = (0, len(input_list) - 1) + left, right = 0, len(input_list) - 1 index = ListExercise.binary_search(input_list, left, right, query) - if index != -1: - return index - else: - return index + return index else: return -1