我怎样才能扭转在Python中的列表?

我怎么能在Python中做到这一点?

array = [0,10,20,40] for (i = array.length() - 1 ;i >= 0; i--) 

我需要有一个数组的元素,但从头到尾。

你可以使用这个reversed函数作为:

 >>> array=[0,10,20,40] >>> for i in reversed(array): ... print(i) 

请注意, reversed(...)不会返回列表。 您可以使用list(reversed(array))得到反转列表。

 >>> L = [0,10,20,40] >>> L[::-1] [40, 20, 10, 0] 

扩展的片语法在Python 2.3.5版本的新功能入门中有很好的解释

通过评论中的特殊要求, 这是最新的切片文档 。

 >>> L = [0,10,20,40] >>> L.reverse() >>> L [40, 20, 10, 0] 

要么

 >>> L[::-1] [40, 20, 10, 0] 

这是复制列表:

 L = [0,10,20,40] p = L[::-1] # Here p will be having reversed list 

这是在原地颠倒清单:

 L.reverse() # Here L will be reversed in-place (no new list made) 

为了反转相同的列表使用:

 array.reverse() 

将反向列表分配到其他列表使用:

 newArray = array[::-1] 
 for x in array[::-1]: do stuff 

使用切片,例如array = array [:: – 1],是一个很好用的技巧,非常python,但是对于新手来说可能有些模糊,使用reverse()方法是日常编码的好方法。

但是,如果您需要像在面试问题中一样反转列表,则可能无法使用像这样的内置方法,因此下面的示例可能是另一种方法:

 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] 

请注意,这不会在字符串序列上工作,因为字符串是不可变的,即不能写入它们来改变元素。

我发现(与其他一些建议相反), l.reverse()是反转Python 3和2中长列表的最快方法。我很想知道其他人是否可以复制这些时间。

l[::-1]可能会比较慢,因为它在反转之前复制列表。 在reversed(l)迭代器周围添加list()调用必须增加一些开销。 当然,如果你想要一个列表或一个迭代器的副本,然后使用这些相应的方法,但是如果你想只是反转列表,那么l.reverse()似乎是最快的方法。

功能

 def rev_list1(l): return l[::-1] def rev_list2(l): return list(reversed(l)) def rev_list3(l): l.reverse() return l 

名单

 l = list(range(1000000)) 

Python 3.5的时机

 timeit(lambda: rev_list1(l), number=1000) # 6.48 timeit(lambda: rev_list2(l), number=1000) # 7.13 timeit(lambda: rev_list3(l), number=1000) # 0.44 

Python 2.7时间

 timeit(lambda: rev_list1(l), number=1000) # 6.76 timeit(lambda: rev_list2(l), number=1000) # 9.18 timeit(lambda: rev_list3(l), number=1000) # 0.46 

可能的方式,

 list1 = [3,4,3,545,6,4,34,243] list1.reverse() list1[::-1] 
 array=[0,10,20,40] for e in reversed(array): print e 

使用反转(阵列)将是可能的最佳路线。

 >>> array = [1,2,3,4] >>> for item in reversed(array): >>> print item 

如果您需要了解如何在不使用内置reversed情况下执行此操作。

 def reverse(a): midpoint = len(a)/2 for item in a[:midpoint]: otherside = (len(a) - a.index(item)) - 1 temp = a[otherside] a[otherside] = a[a.index(item)] a[a.index(item)] = temp return a 

这应该花O(N)时间。

如果你想在其他变量中存储反转列表的元素,那么你可以使用revArray = array[::-1]revArray = list(reversed(array))

但是第一个变种稍快一些:

 z = range(1000000) startTimeTic = time.time() y = z[::-1] print("Time: %ss" % (time.time() - startTimeTic)) f = range(1000000) startTimeTic = time.time() g = list(reversed(f)) print("Time: %ss" % (time.time() - startTimeTic)) 

输出:

 Time: 0.00489711761475 s Time: 0.00609302520752 s 

严格来说,问题不在于如何反向返回列表,而在于如何使用示例列表名称array来反转列表。

要颠倒名为"array"的列表,请使用array.reverse()

所描述的令人难以置信的有用切片方法还可以用于通过使用array = array[::-1]将列表定义为其本身的切片修改来反向列表。

你可以使用reversed()

 array=[0,10,20,40] for e in reversed(array): print e 

列表理解:

[array[n] for n in range(len(array)-1, -1, -1)]

 def reverse(text): output = [] for i in range(len(text)-1, -1, -1): output.append(text[i]) return output 

我认为在Python中反转列表的最好方法是:

 a = [1,2,3,4] a = a[::-1] print(a) >>> [4,3,2,1] 

工作完成,现在你有一个逆转的名单。

你的需求最直接的翻译成Python语句如下:

 for i in xrange(len(array) - 1, -1, -1): print i, array[i] 

这是相当神秘的,但可能是有用的。

使用如下反转的功能并打印

 >>> for element in reversed(your_array): ... print element 

你总是可以像列表一样处理列表,只是从列表的后端弹出堆栈顶部的元素。 这样你就可以利用堆栈的先入先出特性。 当然你正在使用第一个数组。 我喜欢这种方法,因为它非常直观,你可以看到从后端消耗了一个列表,而另一个从前端构建。

 >>> l = [1,2,3,4,5,6]; nl=[] >>> while l: nl.append(l.pop()) >>> print nl [6, 5, 4, 3, 2, 1] 
 def reverse(text): lst=[] for i in range(0,len(text)): lst.append(text[(len(text)-1)-i]) return ''.join(lst) print reverse('reversed') 
 list_data = [1,2,3,4,5] l = len(list_data) i=l+1 rev_data = [] while l>0: j=il l-=1 rev_data.append(list_data[-j]) print "After Rev:- %s" %rev_data 
 >>> l = [1, 2, 3, 4, 5] >>> print(reduce(lambda acc, x: [x] + acc, l, [])) [5, 4, 3, 2, 1] 

您也可以使用数组索引的逐位补码来反向排列数组:

 >>> array = [0, 10, 20, 40] >>> [array[~i] for i, _ in enumerate(array)] [40, 20, 10, 0] 

不管你做什么,都不要这样做。

 def reverse(my_list): L = len(my_list) for i in range(L/2): my_list[i], my_list[Li - 1] = my_list[Li-1], my_list[i] return my_list 
 >>> L = [1, 2, 3, 4] >>> L = [L[-i] for i in range(1, len(L) + 1)] >>> L [4, 3, 2, 1] 

通过切换相反索引的引用来就地倒置:

 >>> l = [1,2,3,4,5,6,7] >>> for i in range(len(l)//2): ... l[i], l[-1-i] = l[-1-i], l[i] ... >>> l [7, 6, 5, 4, 3, 2, 1] 

可以使用__reverse__来完成,它返回一个生成器。

 >>> l = [1,2,3,4,5] >>> for i in l.__reversed__(): ... print i ... 5 4 3 2 1 >>>