def permute( values, perms = list(), cur_perm = list() ): if len( values ) == 0: perms.append( cur_perm ) else: for value in values: new_values = values[:] new_values.remove( value ) new_perm = cur_perm[:] new_perm.append( value ) permute( new_values, cur_perm = new_perm ) return perms