寻找一种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方法?
答案 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]