def reverse_in_place(lst): # Declare a function
size = len(lst) # Get the length of the sequence
hiindex = size - 1
its = size/2 # Number of iterations required
for i in xrange(0, its): # i is the low index pointer
temp = lst[hiindex] # Perform a classic swap
lst[hiindex] = lst[i]
lst[i] = temp
hiindex -= 1 # Decrement the high index pointer
print "Done!"
# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
print array # Print the original sequence
reverse_in_place(array) # Call the function passing the list
print array # Print reversed list
**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]
30 回答
我发现(与其他一些建议相反)
l.reverse()
是迄今为止在Python 3和2中反转长列表的最快方法 . 我有兴趣知道其他人是否可以复制这些时间 .l[::-1]
可能较慢,因为它会在反转之前复制列表 . 在reversed(l)
所做的迭代器周围添加list()
调用必须增加一些开销 . 当然,如果你想要一个列表或迭代器的副本,那么使用那些相应的方法,但如果你只想反转列表,那么l.reverse()
似乎是最快的方法 .功能
名单
Python 3.5时序
Python 2.7时序
对于倒转相同的列表使用:
要将反向列表分配到其他列表中,请使用:
扩展切片语法在Python What's new Entry for release 2.3.5中得到了很好的解释
通过评论this is the most current slice documentation的特殊要求 .
您可以始终将列表视为堆栈,只是从列表的后端弹出堆栈顶部的元素 . 这样你就可以利用堆栈中的第一个特征 . 当然你正在使用第一个阵列 . 我喜欢这种方法,因为它非常直观,因为你看到一个列表从后端消耗而另一个列表是从前端构建的 .
使用 reversed 功能如下并打印
可以使用
__reverse__
来完成,它返回一个生成器 .组织 Value 观:
在Python中,列表的顺序也可以使用 sort 进行操作,以数字/字母顺序组织变量:
暂时:
永久:
您可以使用标志 "reverse=True" 进行排序:
没有组织
也许您不想对值进行排序,而只是反转值 . 然后我们可以这样做:
**在列表顺序中,数字优先于字母 . Python值的组织非常棒 .
使用reversed和list:
我认为在Python中反转列表的最佳方法是:
工作完成了,现在你有一个反向列表 .
你可以使用
reversed()
使用列表理解:
通过切换相反索引的引用来就地反转:
如果要将反转列表的元素存储在某个其他变量中,则可以使用
revArray = array[::-1]
或revArray = list(reversed(array))
.但第一个变种略快一些:
输出:
您可以将reversed函数用于此:
请注意
reversed(...)
不返回列表 . 您可以使用list(reversed(array))
获得反向列表 .严格来说,问题不在于如何反向返回列表,而是如何使用示例列表名称
array
来反转列表 .要反转名为
"array"
的列表,请使用array.reverse()
.所描述的非常有用的切片方法也可以用于通过使用
array = array[::-1]
将列表定义为自身的切片修改来反转列表 .使用切片,例如array = array [:: - 1],是一个巧妙的技巧,非常Pythonic,但对于新手来说可能有点模糊 . 使用reverse()方法是日常编码的好方法,因为它易于阅读 .
但是,如果您需要在面试问题中反转列表,则可能无法使用这些内置方法 . 面试官将研究如何处理问题而不是Python知识的深度,需要一种算法方法 . 以下示例使用经典交换,可能是一种方法: -
请注意,这不适用于元组或字符串序列,因为字符串和元组是不可变的,即,您无法写入它们来更改元素 .
您还可以使用数组索引的bitwise complement来反向遍历数组:
无论你做什么,都不要这样做 .
这是为了复制列表:
这是为了反转列表:
将您的需求最直接地转换为Python是
for
语句:这是相当神秘的,但可能有用 .
要么
可能的方式,
使用反转(数组)可能是最佳路线 .
您是否需要了解如何在不使用内置
reversed
的情况下实现此目的 .这应该花费O(N)时间 .