1 2 3 4 5 6 7 | def subs(xs, sub_len): '''Get all sublists/substrings from xs of the given sub-length.''' for i in range ( len (xs) - sub_len + 1 ): #Get all indexes of the substrings that are at least sub_len long. yield xs[i:i + sub_len] for x in subs( 'abcd' , 2 ): print (x) |
ab bc cd
1 2 3 4 5 6 7 8 9 10 11 | def combinations(xs, comb_size): '''Get all combinations of the given combination size.''' if comb_size = = 0 : yield xs[: 0 ] #Empty list/string else : for i in range ( len (xs) - comb_size + 1 ): for ys in combinations(xs[i + 1 :], comb_size - 1 ): #For every item, combine it with every item that comes after it. yield xs[i] + ys for x in combinations( 'abcd' , 2 ): print (x) |
ab ac ad bc bd cd
1 2 3 4 5 6 7 8 9 10 11 | def perms(xs): '''Get all permutations.''' if len (xs) = = 1 : yield xs else : for i in range ( len (xs)): for ys in perms(xs[:i] + xs[i + 1 :]): #For every item, combine it with every item except itself. yield xs[i] + ys for x in perms( 'abc' ): print (x) |
abc acb bac bca cab cba
1 2 3 4 5 6 7 8 | def permutations(xs, perm_size): '''Get all permutations of the given permutation size.''' for cs in combinations(xs, perm_size): for p in perms(cs): #Get all the permutations of all the combinations. yield p for x in permutations( 'abcd' , 2 ): print (x) |
ab ba ac ca ad da bc cb bd db cd dc
1 2 3 4 5 6 7 8 9 10 11 | def seqs(xs, seq_len): '''Get all sequences of a given length.''' if seq_len = = 0 : yield xs[: 0 ] #Empty list/string else : for i in range ( len (xs)): for ys in seqs(xs, seq_len - 1 ): #For every item, combine it with every item including itself. yield xs[i] + ys for x in seqs( 'abc' , 2 ): print (x) |
aa ab ac ba bb bc ca cb cc