From 9ba5c28ac4b5735102a6c89d8c94cf080eeb3f39 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 31 May 2020 06:43:13 +0200 Subject: [PATCH 1/6] circular_linked_list: Add more len() tests --- data_structures/linked_list/circular_linked_list.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data_structures/linked_list/circular_linked_list.py b/data_structures/linked_list/circular_linked_list.py index cf523f0a4380..da40bf6811db 100644 --- a/data_structures/linked_list/circular_linked_list.py +++ b/data_structures/linked_list/circular_linked_list.py @@ -37,6 +37,15 @@ def __len__(self) -> int: >>> cll.append(1) >>> len(cll) 1 + >>> cll.preappend(0) + >>> len(cll) + 2 + >>> cll.delete_front() + >>> len(cll) + 1 + >>> cll.delete_rear() + >>> len(cll) + 0 """ return self.length From 32109bdcfd52f87d99d0c6950ffc699e17b97854 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 31 May 2020 04:43:57 +0000 Subject: [PATCH 2/6] fixup! Format Python code with psf/black push --- strings/jaro_winkler.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/strings/jaro_winkler.py b/strings/jaro_winkler.py index 73827c2330c0..de09538542e4 100644 --- a/strings/jaro_winkler.py +++ b/strings/jaro_winkler.py @@ -34,7 +34,7 @@ def get_matched_characters(_str1: str, _str2: str) -> str: matched.append(l) _str2 = f"{_str2[0:_str2.index(l)]} {_str2[_str2.index(l) + 1:]}" - return ''.join(matched) + return "".join(matched) # matching characters matching_1 = get_matched_characters(str1, str2) @@ -42,17 +42,22 @@ def get_matched_characters(_str1: str, _str2: str) -> str: match_count = len(matching_1) # transposition - transpositions = len( - [(c1, c2) for c1, c2 in zip(matching_1, matching_2) if c1 != c2] - ) // 2 + transpositions = ( + len([(c1, c2) for c1, c2 in zip(matching_1, matching_2) if c1 != c2]) // 2 + ) if not match_count: jaro = 0.0 else: - jaro = 1 / 3 * ( - match_count / len(str1) - + match_count / len(str2) - + (match_count - transpositions) / match_count) + jaro = ( + 1 + / 3 + * ( + match_count / len(str1) + + match_count / len(str2) + + (match_count - transpositions) / match_count + ) + ) # common prefix up to 4 characters prefix_len = 0 @@ -65,7 +70,8 @@ def get_matched_characters(_str1: str, _str2: str) -> str: return jaro + 0.1 * prefix_len * (1 - jaro) -if __name__ == '__main__': +if __name__ == "__main__": import doctest + doctest.testmod() print(jaro_winkler("hello", "world")) From 097f6a445fc8c02df8f88292338cbfdf63665076 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 31 May 2020 06:54:35 +0200 Subject: [PATCH 3/6] prepend() --- data_structures/linked_list/circular_linked_list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/linked_list/circular_linked_list.py b/data_structures/linked_list/circular_linked_list.py index da40bf6811db..f5934783d201 100644 --- a/data_structures/linked_list/circular_linked_list.py +++ b/data_structures/linked_list/circular_linked_list.py @@ -37,7 +37,7 @@ def __len__(self) -> int: >>> cll.append(1) >>> len(cll) 1 - >>> cll.preappend(0) + >>> cll.prepend(0) >>> len(cll) 2 >>> cll.delete_front() From fbcf9cddcc58047760750a072c23f68dc7c14548 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 31 May 2020 04:54:56 +0000 Subject: [PATCH 4/6] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 78095b2645a4..78afe07ec21f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -622,6 +622,7 @@ * [Boyer Moore Search](https://github.com/TheAlgorithms/Python/blob/master/strings/boyer_moore_search.py) * [Check Pangram](https://github.com/TheAlgorithms/Python/blob/master/strings/check_pangram.py) * [Is Palindrome](https://github.com/TheAlgorithms/Python/blob/master/strings/is_palindrome.py) + * [Jaro Winkler](https://github.com/TheAlgorithms/Python/blob/master/strings/jaro_winkler.py) * [Knuth Morris Pratt](https://github.com/TheAlgorithms/Python/blob/master/strings/knuth_morris_pratt.py) * [Levenshtein Distance](https://github.com/TheAlgorithms/Python/blob/master/strings/levenshtein_distance.py) * [Lower](https://github.com/TheAlgorithms/Python/blob/master/strings/lower.py) From c73d3ee425cc006497ab1099f62d2c2cf0d78ca9 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 31 May 2020 07:18:45 +0200 Subject: [PATCH 5/6] Fix decrementation of self.length --- data_structures/linked_list/circular_linked_list.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data_structures/linked_list/circular_linked_list.py b/data_structures/linked_list/circular_linked_list.py index f5934783d201..f7eb01ce174e 100644 --- a/data_structures/linked_list/circular_linked_list.py +++ b/data_structures/linked_list/circular_linked_list.py @@ -146,15 +146,15 @@ def delete_front(self) -> None: current_node = self.head if current_node.next_ptr == current_node: - self.head, self.length = None, 0 + self.head = None + self.length = 0 else: while current_node.next_ptr != self.head: current_node = current_node.next_ptr current_node.next_ptr = self.head.next_ptr self.head = self.head.next_ptr - - self.length -= 1 + self.length -= 1 def delete_rear(self) -> None: """ @@ -178,15 +178,15 @@ def delete_rear(self) -> None: temp_node, current_node = self.head, self.head if current_node.next_ptr == current_node: - self.head, self.length = None, 0 + self.head = None + self.length = 0 else: while current_node.next_ptr != self.head: temp_node = current_node current_node = current_node.next_ptr temp_node.next_ptr = current_node.next_ptr - - self.length -= 1 + self.length -= 1 if __name__ == "__main__": From 1382f0bd6f235d64bf7f9acad2aa73db1de99613 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 31 May 2020 09:15:40 +0200 Subject: [PATCH 6/6] Add empty list tests --- .../linked_list/circular_linked_list.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/data_structures/linked_list/circular_linked_list.py b/data_structures/linked_list/circular_linked_list.py index f7eb01ce174e..290e30ebfad6 100644 --- a/data_structures/linked_list/circular_linked_list.py +++ b/data_structures/linked_list/circular_linked_list.py @@ -139,6 +139,9 @@ def delete_front(self) -> None: >>> cll.delete_front() >>> print(f"{len(cll)}: {cll}") 1: + >>> cll.delete_front() + >>> print(f"{len(cll)}: {cll}") + 0: Empty linked list """ if not self.head: raise IndexError("Deleting from an empty list") @@ -147,14 +150,16 @@ def delete_front(self) -> None: if current_node.next_ptr == current_node: self.head = None - self.length = 0 else: while current_node.next_ptr != self.head: current_node = current_node.next_ptr current_node.next_ptr = self.head.next_ptr self.head = self.head.next_ptr - self.length -= 1 + + self.length -= 1 + if not self.head: + assert self.length == 0 def delete_rear(self) -> None: """ @@ -171,6 +176,9 @@ def delete_rear(self) -> None: >>> cll.delete_rear() >>> print(f"{len(cll)}: {cll}") 1: + >>> cll.delete_rear() + >>> print(f"{len(cll)}: {cll}") + 0: Empty linked list """ if not self.head: raise IndexError("Deleting from an empty list") @@ -179,14 +187,16 @@ def delete_rear(self) -> None: if current_node.next_ptr == current_node: self.head = None - self.length = 0 else: while current_node.next_ptr != self.head: temp_node = current_node current_node = current_node.next_ptr temp_node.next_ptr = current_node.next_ptr - self.length -= 1 + + self.length -= 1 + if not self.head: + assert self.length == 0 if __name__ == "__main__":