2013-07-19 2 views
3

Как можно отменить порядок списка в Python без использования цикла? Других ограничений на пространство решений нет.Как можно отменить порядок списка в Python без использования цикла?

+1

'l.reverse()'. Это первый результат Google * для «обратного списка Python», * прямо в документации *. – user2357112

ответ

6
a = ['a','b','c'] 

вы можете попробовать

b = a[::-1] 

Это будет возмещена список без использования цикла.

Вы можете использовать один и тот же трюк в любой последовательности/контейнере/итерации, чтобы получить обратный элемент.

+0

Спасибо. Можете ли вы объяснить, как интерпретировать аргументы в квадратных скобках? – Info5ek

+1

@ user1800340 Это Python [Обозначение фрагмента] (http://stackoverflow.com/questions/509211/the-python-slice-notation) :) – TerryA

+1

Думаю, я понял это. 'list [: x]' означает шаг в направлении (знак x) и величину x. Следовательно, -1 будет означать шаг назад, при этом каждый шаг будет размером 1. – Info5ek

1

Вы также можете использовать встроенную функцию reversed

a = list(reversed(your_list)) 
+1

@septi На самом деле 'reverseed' возвращает итератор, поэтому вам нужно использовать' list' для хранения списка в 'a' вместо итератора. – SethMMorton

1

Предполагая, что вы хотите, чтобы изменения в месте:

>>> a = [1,2,3] 
>>> a.reverse() 
>>> a 
[3, 2, 1] 
>>> a[:] = a[::-1] 
>>> a 
[1, 2, 3] 
1

Есть много способов:

Вы можете использовать расширенные List Slicing:

>>> print [1, 2, 3, 4, 5][::-1] 
[5, 4, 3, 2, 1] 

Или использовать встроенный в .reverse() функции:

>>> L = [1, 2, 3, 4, 5] 
>>> L.reverse() 
>>> print L 
[5, 4, 3, 2, 1] 

Или использовать reversed(), который возвращает t он отменил список - но в качестве итератора:

>>> L = [1, 2, 3, 4, 5] 
>>> print reversed(L) 
<listreverseiterator object at 0x2c3630> 
>>> print list(reversed(L)) 
[5, 4, 3, 2, 1] 

Зубчатых сравнения:

$ python -m timeit "L = range(1000)" "L = L[::-1]" 
100000 loops, best of 3: 11.8 usec per loop 

$ python -m timeit "L = range(1000)" "L.reverse()" 
100000 loops, best of 3: 9.13 usec per loop 

$ python -m timeit "L = range(1000)" "L = list(reversed(L))" 
100000 loops, best of 3: 19.1 usec per loop 
2

Этой обратная функция является неэффективной из-за того, как Python обрабатывает списки. Тем не менее, стоит понять, потому что он показывает, как использовать рекурсивную функцию для замены цикла таким образом, который можно адаптировать практически к любому языку. (Другими словами, это не зависит от встроенных функций Python.) Обратите внимание, что l[:1] возвращает список с одним элементом, содержащий первый элемент l, а l[1:] возвращает все остальные элементы в l.

>>> def reverse(l): 
...  return reverse(l[1:]) + l[:1] if l else l 
... 
>>> reverse([1, 2, 3, 4, 5]) 
[5, 4, 3, 2, 1] 
Смежные вопросы