我正在尝试创建一个函数,该函数将根据另一个列表的长度根据模式创建一个列表。由于模式的性质,我不确定如何执行此操作。我正在尝试制作类似的东西:
len(a_list) = 50
created_pattern_a_list = [1,2,4,8,10,20,40]
len(b_list) = 9000
created_patten_b_list = [1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000]
所以我想要的模式是 1,2,4,8,10,...。所以它是指数的,但直到它达到下一个 10 的幂,然后它以 10 的那个幂重新开始。我'我不确定如何制作可以执行此操作的函数。像这样的东西:
def create_patten_list(a_list):
reff_list = [1,2,4,8,10,20,40,80,100,200,400,800,1000,2000,4000,8000,10000]
corr_list = [a for a in reff_list if a <= len(a_list)]
return corr_list
但是 a_list 的长度可能比 10000 长很多,所以我不能像这样只使用一个固定长度的默认列表。有没有更好的方法来设置这样的模式?
最佳答案
我敢肯定这不是最优雅的解决方案,但请考虑一下: 您模板的重复部分只有 1、2、4 和 8。其余只是数量级。
def get_pattern(length):
template = [1, 2, 4, 8]
output = []
i = 0
while True:
num = template[i%4] * 10**(i//4)
if num > length:
break
output += [num]
i += 1
return output
所以:
>>> get_pattern(5000)
[1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800, 1000, 2000, 4000]
关于python - 使用模式制作列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960868/