这可能有效。我确信有一种更简单的方法……可能涉及itertools
。请注意,这num_pages
仅大致决定了您实际将获得的页面数。
编辑:哎呀!有一个错误- 它切断了最后一组!下面的内容应该是固定的,但是请注意,最后一页的长度会有些不可预测。另外,我添加.upper()
了可能的小写名称。
EDIT2:以前定义letter_groups的方法效率低下;以下基于dict的代码更具可扩展性:
names = ['Agrajag', 'Colin', 'Deep Thought', 'Ford Prefect' , 'Zaphod Beeblebrox', 'Zarquon']
num_pages = 3
def group_names(names, num_pages):
letter_groups = defaultdict(list)
for name in names: letter_groups[name[0].upper()].append(name)
letter_groups = [letter_groups[key] for key in sorted(letter_groups.keys())]
current_group = []
page_groups = []
group_size = len(names) / num_pages
for group in letter_groups:
current_group.extend(group)
if len(current_group) > group_size:
page_groups.append(current_group)
current_group = []
if current_group: page_groups.append(current_group)
return page_groups
print group_names(names, num_pages)