reversed() 与 xrange()
reversed() vs. xrange()
我需要向后遍历一个列表。我阅读了有关 xrange() 和 reversed() 的内容。哪个更贵?
xrange()
生成一个数字序列。然后,您可以根据需要将这些数字用作列表索引,或者您可以将它们用于任何需要这些数字的地方。
for i in xrange( len(l)-1, -1, -1):
item = l[i]
print item
reversed()
从具有长度且可以被索引的东西中生成项目。
for item in reversed(l):
print item
我会使用 reversed()
,因为它使您的代码更短、更简单、更清晰并且更容易正确编写。
您可以使用 Python 的 timeit 库来计时。你没有说你有什么样的列表,所以我假设一个简单的字符串列表。首先,我创建了一个 100 项长的列表,然后对两者进行计时:
my_list = ["hello"] * 100
def v1():
for x in my_list[::-1]:
pass
def v2():
for x in reversed(my_list):
pass
print timeit.timeit(v1)
print timeit.timeit(v2)
结果如下:
2.78170533583
2.13084949985
如您所见,在此示例中 reversed()
速度稍快一些。
我需要向后遍历一个列表。我阅读了有关 xrange() 和 reversed() 的内容。哪个更贵?
xrange()
生成一个数字序列。然后,您可以根据需要将这些数字用作列表索引,或者您可以将它们用于任何需要这些数字的地方。
for i in xrange( len(l)-1, -1, -1):
item = l[i]
print item
reversed()
从具有长度且可以被索引的东西中生成项目。
for item in reversed(l):
print item
我会使用 reversed()
,因为它使您的代码更短、更简单、更清晰并且更容易正确编写。
您可以使用 Python 的 timeit 库来计时。你没有说你有什么样的列表,所以我假设一个简单的字符串列表。首先,我创建了一个 100 项长的列表,然后对两者进行计时:
my_list = ["hello"] * 100
def v1():
for x in my_list[::-1]:
pass
def v2():
for x in reversed(my_list):
pass
print timeit.timeit(v1)
print timeit.timeit(v2)
结果如下:
2.78170533583
2.13084949985
如您所见,在此示例中 reversed()
速度稍快一些。