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']]

浙公网安备 33010602011771号