假如要生成一个列表的反序列,可以先生成一个空的列表,再将一堆数字添加进来,然后用reverse取反就可以得到。如果是现实的问题,比如获取的外部数据,为了实现最近优先的原则,将数字被添加到列表后的顺序是反的,可以将上述的思路中将数据添加到列表后取反即可。
当然还有另外的思路,就是我们将最近的数据插入到列表的起始位置,可以用insert函数进行操作即可,代码可以精简。
两种思路实例测试:
In [1]: # -*- coding: utf-8 -*-
...: """
...: Created on Thu Jan 18 23:15:35 2018
...: 算法之小实验举例
...: @author: BruceWong
...: """
...:
...: import time
...:
...: count = 100*50
...: a = time.time()
...:
...: num1 = []
...: for i in range(count):
...: num1.append(i)
...: num1.reverse()
...: print(time.time()-a)
...: print(num1[:10])
...:
...:
...: b = time.time()
...: num2 = []
...: for i in range(count):
...: num2.insert(0,i)
...: print(time.time() - b)
...: print(num2[:10])
...:
0.0
[4999, 4998, 4997, 4996, 4995, 4994, 4993, 4992, 4991, 4990]
0.01564621925354004
[4999, 4998, 4997, 4996, 4995, 4994, 4993, 4992, 4991, 4990]
通过两种方法的测试,可以得到两个程序运行的时间是有差别的,这里第一种方式类似于线性增长的逻辑,而第二种方法是二次方增长的逻辑。明显线性增长的时间比二次方增长的时间更少。因而在构建算法的时候,需要考量程序运行的方式,以优化程序运行时间。