python 反向和[::-1]之间的差异

xdyibdwo  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(167)

只是想知道reverse()和[::-1]在引用方面的区别。
例如

p = [1,2,3] 
x = p[::-1] 
print(x) 
print(p) 

p.reverse() 
print(p ==p[::-1]) 
print(p == x)

因此输出为

[3,2,1]
[1,2,3] 
False
True
olqngx59

olqngx591#

reverse**在原处 * a反转列表,参见the manual,而[::-1]以相反的顺序给出新列表。
在调用p.reverse()之后尝试print(p),您将看到不同之处。

2hh7jdfx

2hh7jdfx2#

关于python中的倒排表,主要有3种方法:

    • 将返回反向iterator的内置函数reversed(seq),反向iterator是表示将返回该流的连续项的数据流的对象。生成该反向迭代器在时间/空间复杂度上是O(1),并且使用它来迭代通过列表的元素将是O(N)O(1)的时间/空间复杂度,其中N是列表的长度。如果您只是想在不修改的情况下迭代反向列表,则需要使用这种方法。在这种情况下,这种方法可以提供最佳性能。
  • p.reverse()就地反转列表。操作是O(N)O(1)在时间/空间复杂性方面是低的,因为它必须遍历列表的一半元素来反转它们,并且它不将结果存储在新列表中。p.reverse()将返回None,并且在该指令之后,元素将在p中直接反转。如果您不需要保留原始列表,并且您有几个通道/操作要对反转列表的元素执行,以及如果您必须保存处理过的反转列表,则此方法很好。
  • 使用切片[::-1]创建列表的新对象/a以逆序复制。该操作在空间/时间复杂度上是O(N)O(N),因为您必须将列表的所有元素复制到新列表中,并且此新列表也将消耗与原始列表相同的空间量。在引用方面,您将创建一个新对象以便即使print(p == x)返回Trueprint(p is x)将返回False,因为这两个对象共享相同的值,但具有不同的引用。如果您需要保留原始列表,并将其反向副本存储在不同的对象中以供进一步处理,那么这种方法非常有用。

总而言之,根据您的用例,您将不得不使用这三种目标略有不同、性能完全不同的方法之一。

相关问题