From 2cbadc88ab1f3252364465c7660cdb96a377eace Mon Sep 17 00:00:00 2001 From: dpittaluga76 Date: Mon, 12 Jul 2021 03:16:31 -0300 Subject: [PATCH] Improves readability and processing time (#4510) * Removes overuse of lambdas, improves readability and processing time when it finds bitstring to print out. Removes overuse of lambdas, uses dictionary instead. This improves readability and processing time when it finds the bitstring to print out. * Update huffman.py --- compression/huffman.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/compression/huffman.py b/compression/huffman.py index 3a3cbfa4b..b6cc4de1e 100644 --- a/compression/huffman.py +++ b/compression/huffman.py @@ -5,7 +5,7 @@ class Letter: def __init__(self, letter, freq): self.letter = letter self.freq = freq - self.bitstring = "" + self.bitstring = {} def __repr__(self): return f"{self.letter}:{self.freq}" @@ -51,10 +51,10 @@ def build_tree(letters): def traverse_tree(root, bitstring): """ Recursively traverse the Huffman Tree to set each - Letter's bitstring, and return the list of Letters + Letter's bitstring dictionary, and return the list of Letters """ if type(root) is Letter: - root.bitstring = bitstring + root.bitstring[root.letter] = bitstring return [root] letters = [] letters += traverse_tree(root.left, bitstring + "0") @@ -65,20 +65,21 @@ def traverse_tree(root, bitstring): def huffman(file_path): """ Parse the file, build the tree, then run through the file - again, using the list of Letters to find and print out the + again, using the letters dictionary to find and print out the bitstring for each letter. """ letters_list = parse_file(file_path) root = build_tree(letters_list) - letters = traverse_tree(root, "") - print(f"Huffman Coding of {file_path}: ") + letters = { + k: v for letter in traverse_tree(root, "") for k, v in letter.bitstring.items() + } + print(f"Huffman Coding of {file_path}: ") with open(file_path) as f: while True: c = f.read(1) if not c: break - le = list(filter(lambda l: l.letter == c, letters))[0] - print(le.bitstring, end=" ") + print(letters[c], end=" ") print()