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



