我有一个非常简单的问题:索引和反向索引哪个更好?
例如:
list1 = [1, 2, 3]
print list1[-1]
print list1[len(list1) - 1]现在,两个print语句都打印相同的内容,但这是否意味着两个表达式是相同的呢?
list1[-1])比索引(list1[len(list1) - 1])更具有性能优势,还是相反?发布于 2014-09-22 19:29:59
请注意,与任何性能考虑无关,很明显,list1[-1]是正确的方法。它简洁,容易阅读,并直接表达你的意图.
话虽如此,以下是一些时间安排:
list1 = [1, 2, 3]
list2 = [random.randint(1, 20) for _ in range(20000)]
%timeit list1[-1]
# 10000000 loops, best of 3: 51.6 ns per loop
%timeit list1[len(list1)-1]
# 10000000 loops, best of 3: 146 ns per loop
%timeit list2[-1]
# 10000000 loops, best of 3: 52.4 ns per loop
%timeit list2[len(list1)-1]
# 10000000 loops, best of 3: 148 ns per loop很明显,为什么list1[-1]速度更快。首先,列表索引和负面列表索引没有真正的区别。主要的性能问题是索引,而不是小的转换。
%timeit list2[-1]
# 10000000 loops, best of 3: 52.4 ns per loop
%timeit list2[19999]
# 10000000 loops, best of 3: 47.1 ns per loop所以这两个版本都要做一个列表索引,所需时间差不多相同,但其中一个版本还必须先提取长度并执行减法,这在这些尺度上是很重要的。
%timeit len(list2)
# 10000000 loops, best of 3: 71 ns per loop
% timeit 20000 - 1
# 100000000 loops, best of 3: 14.9 ns per loop发布于 2014-09-22 19:24:26
当然,print list1[-1]是更好、更毕多尼的,因为在print list1[len(list1) - 1]中您调用了len函数,而且它的性能比第一次打印要低!
看到两者的真实时间:很明显你可以看到不同的!
请注意,系统是程序使用的系统CPU时间。这仅包括内核系统调用,而不包括任何用户库调用.。
~/Desktop $ time python -c print list1[len[1,2,3] - 1]
real 0m0.022s
user 0m0.019s
sys 0m0.004s
~/Desktop $ time python -c print list1[-1]
real 0m0.013s
user 0m0.004s
sys 0m0.008s真正的是程序从开始到结束之间的总运行时间。
用户是程序使用的用户CPU时间。这包括程序所进行的所有用户模式库调用。
https://stackoverflow.com/questions/25981655
复制相似问题