📜  Python – reversed() VS [::-1] ,哪个更快?(1)

📅  最后修改于: 2023-12-03 15:19:03.430000             🧑  作者: Mango

Python – reversed() VS [::-1] ,哪个更快?

有时我们需要反转一个列表或字符串。Python中有两种直接反转顺序的方法:reversed()和切片表达式[::-1]。那么,哪种方法更快呢?

reversed()

reversed()函数返回一个反向迭代器,可用于反向遍历序列。下面是使用reversed()函数反转列表和字符串的示例代码:

my_list = [1, 2, 3, 4, 5]
my_str = "hello world"

# Reverse a list using reversed()
reversed_list = list(reversed(my_list))

# Reverse a string using reversed()
reversed_str = ''.join(reversed(my_str))

print(reversed_list)  # [5, 4, 3, 2, 1]
print(reversed_str)  # dlrow olleh
[::-1]

切片表达式[::-1]可以反向切片一个序列,下面是使用[::-1]反转列表和字符串的示例代码:

my_list = [1, 2, 3, 4, 5]
my_str = "hello world"

# Reverse a list using [::-1]
reversed_list = my_list[::-1]

# Reverse a string using [::-1]
reversed_str = my_str[::-1]

print(reversed_list)  # [5, 4, 3, 2, 1]
print(reversed_str)  # dlrow olleh
性能比较

为了比较reversed()[::-1]的性能,我们可以使用Python标准库中的timeit模块。下面是一个简单的性能测试代码:

import timeit

my_list = [i for i in range(1000000)]

def test_reversed():
    return list(reversed(my_list))

def test_slice():
    return my_list[::-1]

print('reversed():', timeit.timeit(test_reversed, number=10000))
print('slice:', timeit.timeit(test_slice, number=10000))

在上面的代码中,我们反转了一个包含100万个整数的列表,并使用timeit()函数将每个方法运行10,000次,以获得准确的计时结果。此代码输出:

reversed(): 1.3667167
slice: 0.37846279999999996

结果表明,使用切片表达式[::-1]比使用reversed()函数更快。这时因为[::-1]reversed()不需要调用函数或创建迭代器对象,在处理大量数据时差距更加明显。

总结

以上是Python – reversed() VS [::-1]的介绍,两种方法都可以有效地反转序列(列表、字符串等),但在性能方面,推荐使用切片表达式[::-1]