diff --git a/Lib/textwrap.py b/Lib/textwrap.py index bb6a1186316275..7aa2a82af2fcc3 100644 --- a/Lib/textwrap.py +++ b/Lib/textwrap.py @@ -432,15 +432,30 @@ def dedent(text): lines = text.split('\n') # Get length of leading whitespace, inspired by ``os.path.commonprefix()``. - non_blank_lines = [l for l in lines if l and not l.isspace()] - l1 = min(non_blank_lines, default='') - l2 = max(non_blank_lines, default='') - margin = 0 + val = False + for i, line in enumerate(lines): + # Compute min + max concurrently + normalize others + if line and not line.isspace(): + if val: + if line < l1: + l1 = line + elif line > l2: + l2 = line + else: + val = True + l1 = l2 = line + + else: + lines[i] = '' + + if not val or not l1: + return '\n'.join(lines) + for margin, c in enumerate(l1): if c != l2[margin] or c not in ' \t': break - return '\n'.join([l[margin:] if not l.isspace() else '' for l in lines]) + return '\n'.join([line[margin:] for line in lines]) def indent(text, prefix, predicate=None):