固定长度的序列以python的增量重复

时间:2018-12-20 19:04:34

标签: python

寻找一种python方式来重复固定长度的序列,同时增加序列数字直到达到最大长度。

到目前为止,该代码使用while循环和四个变量(一个是列表本身)来完成如下逻辑,

l = []
i, repeat, max_len = 0, 3, 20
while True:
    if len(l) + repeat <= max_len:
        l.extend([i] * repeat)
    else:
        repeat = max_len - len(l)
        l.extend([i] * repeat)
        break
    i += 1

上面的代码产生

l = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6]

因此,重复固定长度的3个单位的序列,直到达到最大长度20(忽略max_len允许的序列末尾数字)

有没有做同样方法的pythonic方法?

3 个答案:

答案 0 :(得分:4)

这个怎么样?

[int(i/repeat) for i in range(max_len)]

答案 1 :(得分:0)

好吧,这将使您通过列表理解准确地创建您的列表。

l = [i//(repeat) for i in range(max_len)]
# [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6] 

但是我认为原始功能存在错误,因为最后应该有三个5

l = [i//(repeat) for i in range(max_len//repeat * repeat)]
# [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5]

答案 2 :(得分:0)

具有列表理解

>>> i, repeat, max_len = 0, 3, 20
>>> q = max_len//repeat
>>> [x for x in range(i, i+q) for y in range(repeat)]+[i+q for y in range(max_len%repeat)]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6]

具有不同的起始值:

>>> i = 5
>>> [x for x in range(i, i+q) for y in range(repeat)]+[i+q for y in range(max_len%repeat)]
[5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11]