Tôi có danh sách tên, ví dụ: ['Agrajag', 'Colin', 'Deep Thought', ... , 'Zaphod Beeblebrox', 'Zarquon']
. Bây giờ tôi muốn phân vùng danh sách này thành các danh sách phụ có kích thước bằng nhau, để ranh giới của các nhóm con ở chữ cái đầu tiên của các tên, ví dụ: AF, GL, MP, QZ, không phải A-Fe, Fi-Mo, Mu-Pra , Pre-Z.Python: danh sách phân vùng tên thành các danh sách con có kích thước bằng nhau
tôi chỉ có thể đưa ra một parition tĩnh cỡ mà không mất kích thước của các phân nhóm vào tài khoản:
import string, itertools
def _group_by_alphabet_key(elem):
char = elem[0].upper()
i = string.ascii_uppercase.index(char)
if i > 19:
to_c = string.ascii_uppercase[-1];
from_c = string.ascii_uppercase[20]
else:
from_c = string.ascii_uppercase[i/5*5]
to_c = string.ascii_uppercase[i/5*5 + 4]
return "%s - %s" % (from_c, to_c)
subgroups = itertools.groupby(name_list, _group_by_alphabet_key)
Bất kỳ ý tưởng tốt hơn?
P.S .: điều này nghe có vẻ hơi giống với bài tập về nhà, nhưng thực tế là dành cho trang web nơi các thành viên sẽ được hiển thị trong 5-10 tab có nhóm có kích thước bằng nhau.
Điều đó dường như hoạt động tốt với dữ liệu thực của tôi về 500 Tên. Cảm ơn! –
Ah, tốt - không chắc liệu nó có mở rộng không. – senderle
@piquadrat, cảm ơn vì đã chấp nhận - nhưng hãy lưu ý lỗi! Nó được cố định ở trên. – senderle