Поскольку ваш name_list
должен быть отсортирован для работы groupby
, разве вы не можете просто проверить каждое N-е значение и построить свои деления таким образом?
right_endpoints = name_list[N-1::N]
И используя "A"
каксамая левая конечная точка и "Z"
как самая правая конечная точка, вы можете соответственно построить N делений, и все они должны иметь одинаковый размер.
- Итак, первая левая конечная точка будет "A",первая правая конечная точка будет
right_endpoints[0]
. - Следующая левая конечная точка будет символом после
right_endpoints[0]
, следующая правая конечная точка будет right_endpoints[1]
. - и т. д., пока вы не нажметеN-й диапазон, в котором установлена конечная точка "Z".
Проблема, с которой вы можете столкнуться, заключается в том, что если два из этих right_endpoints
совпадают ...
редактировать: пример
>>> names = ['Aaron', 'Abel', 'Cain', 'Daniel', 'Darius', 'David', 'Ellen', 'Gary', 'James', 'Jared', 'John', 'Joseph', 'Lawrence', 'Michael', 'Nicholas', 'Terry', 'Victor', 'Zulu']
>>> right_ends, left_ends = names[2::3], names[3::3]
>>> left_ends = ['A'] + left_ends
>>> left_ends, right_ends
>>> ["%s - %s" % (left, right) for left, right in zip(left_ends, right_ends)]
['A - Cain', 'Daniel - David', 'Ellen - James', 'Jared - Joseph', 'Lawrence - Nicholas', 'Terry - Zulu']