33,008
社区成员
发帖
与我相关
我的任务
分享
# 序列均衡分段
def balance_split(seq, split_cnt):
if split_cnt > len(seq): split_cnt = len(seq)
seq_len = len(seq)
# 最接近seq_len的能被split_cnt整除的数,nearest < seq_len
nearest = seq_len / split_cnt * split_cnt
avg_len = nearest / split_cnt
diff = seq_len - nearest
# 将seq分成两段
## 第一段按步长avg_len+1分片
seq_1 = [ seq[i : i+avg_len+1] for i in xrange(0, diff*(avg_len+1), avg_len+1) ]
## 第二段按步长avg_len分片
seq_2 = [ seq[i : i+avg_len] for i in xrange(diff*(avg_len + 1), len(seq), avg_len) ]
# 合并seq_1, seq_2
return seq_1 + seq_2