3 ms·
Sometimes mutations in comprehensions are very expressive. def scan(items, f, initial): x = initial return (x := f(x, y) for y in items) There are l
by hansvm 2y ago
Sometimes mutations in comprehensions are very expressive.
def scan(items, f, initial):
x = initial
return (x := f(x, y) for y in items)
There are lots of other short ways to write `scan`, but I don't think any of them map so clearly to a naive definition of what it's supposed to do.
- judicious 2y agoThat's incredibly clever, generators are underrated. I once challenged my friend to do leetcode problems with only expressions. Here's levenshtein distance, however it's incredibly clunky. levenshtein_distance = lambda s1, s2: [matrix := [[0] * (len(s2) + 1) for _ in range(len(s1) + 1)], [ [ (matrix[i].__setitem__(j, min(matrix[i-1][j] + 1, matrix[i][j-1] + 1, matrix[i-1][j-1] + (0 if s1[i-1] == s2[j-1] else 1))), matrix[i][-1])[1] for j in range(1, len(s2) + 1) ] for i in range(1, len(s1) + 1) ], matrix[-1][-1]][-1]