python小练习-对序列分组1

多列输出.有任意项的序列或者其他容器,把它们等距离分列显示.由调用者提供数据和
输出格式.例如,如果你传入100 个项并定义3 列输出,按照需要的模式显示这些数据.这种情况下,应
该是两列显示33 个项,最后一列显示34 个.

第一次绕了很久才写出来的:
 1 def group_by(list,n):
 2     H = []
 3     quantity,reminder = divmod(len(list),n)   #将每组的数量和余数分别赋值给quantity,reminder
 4     if reminder == 0:                         #余数为0时,刚好将所有元素均分
 5         for i in range(n):
 6             li = list[i*quantity:(i+1)*quantity]
 7             H.append(li)
 8     else:                                     #若余数不为0,则将列表分为两个部分
 9         g_head = n - reminder
10         g_tail = reminder
11         headList = list[:g_head*quantity]     #组数为总组数减去余数的分组为前半部分
12         tailList = list[g_head*quantity:]     #后半部分
13         for k in range(g_head):               #将前半部分按照每组为quantity数量进行分组
14             every_li1 = headList[k*quantity:(k+1)*quantity]
15             H.append(every_li1)
16         for j in range(g_tail):               #将后半部分按照每组quantity+1的数量分组
17             every_li2 = tailList[j*(quantity+1):(j+1)*(quantity+1)]
18             H.append(every_li2)
19     return H
最后感觉第一次写的太low了,就改进了一下,包括写注释,变量命名,将重复代码封装起来:
def group_by(inputList,n):
    '''将一个列表中的元素分成n组,如果不能平均分,
    前面的组就少分一个,后面的组就多分一个元素'''
    groupList = []
    quantity,reminder = divmod(len(list),n)   #将每组的数量和余数分别赋值给quantity,reminder
    if reminder == 0:                         #余数为0时,刚好将所有元素均分
        add(n,quantity,inputList,groupList)
    else:                                     #若余数不为0,则将列表分为两个部分
        g_head = n - reminder
        g_tail = reminder
        headList = inputList[:g_head*quantity]     #组数为总组数减去余数的分组为前半部分
        tailList = inputList[g_head*quantity:]     #后半部分
        add(g_head,quantity,headList,groupList)    #将前半部分按照每组为quantity数量进行分组
        quantity = quantity + 1
        add(g_tail,quantity,tailList,groupList)    #将后半部分按照每组quantity+1的数量分组
    return groupList

def add(n,quantity,inputList,groupList):
    for i in range(n):
        new_list = inputList[i*quantity:(i+1)*quantity]
        groupList.append(new_list)

 

输入参数并执行函数:

zimu = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',\
    'P','Q','R','S','T','U','V','W','X','Y','Z']

print group_by(zimu,5)

输出:
[['A', 'B', 'C', 'D', 'E'], ['F', 'G', 'H', 'I', 'J'], ['K', 'L', 'M', 'N', 'O'], ['P', 'Q', 'R', 'S', 'T'], ['U', 'V', 'W', 'X', 'Y', 'Z']]

 

posted @ 2017-04-28 15:44  灵主  阅读(599)  评论(0)    收藏  举报