2017-01-18 2 views
-7

Какова будет логика или код этой проблемы? Функция reverse() не принимает никаких аргументов, и list[::-1] также является тем же. Как это сделать легко?Обратный набор элементов списка и сохранить его в списке?

Пример, учитывая:

list = [1,5,4,3,2,6] 

реверса 5 ... 2, то выход будет:

list = [1,2,3,4,5,6] 
+0

получил много downvote! Зачем ? –

+3

Не используйте 'list' в качестве имени переменной, вы затеняете встроенную функцию [function] (https://docs.python.org/2/library/functions.html#list). –

ответ

0

Вы могли бы сделать что-то вроде этого:

l = [1,5,4,3,2,6] 
index5 = l.index(5) 
index2 = l.index(2) 
l[index5:index2+1] = l[index2:index5-1:-1] 

Если вы хотите, чтобы это было более явным, вы можете использовать reversed:

l[index5:index2+1] = reversed(l[index5:index2+1]) 
+1

Кто бы ни отклонил этот ответ, не могли бы вы объяснить, почему? –

+1

Не уменьшалось, но, вероятно, потому, что оно работает только для списков с уникальными элементами. Не общее решение, как другие предлагаемые ответы. – mkiever

+0

Я действительно шокирован :( –

3

Вы можете использовать список назначения ломтика, который изменяет список на месте:

>>> L = [1, 5, 4, 3, 2, 6] 
>>> L[1:5] = L[4:0:-1] 
>>> L 
[1, 2, 3, 4, 5, 6] 
0

Edit: К сожалению, я не понял ваш вопрос.

>>> l = [1, 5, 4, 3, 2, 6] 
>>> temp = l[1:5] 
>>> temp.reverse() 
>>> l[1:5] = temp 
>>> l 
>>> [1, 2, 3, 4, 5, 6] 
+2

Не то, что хочет OP – MooingRawr

3

Вы можете переназначить срез списка в том же срезе в обратном

l = [1,5,4,3,2,6] 
l[1:5] = l[1:5][::-1] 
print(l) 
#[1, 2, 3, 4, 5, 6] 
+0

спасибо, что это работает. –

+2

Я нахожу 'l [1: 5] = обратный (l [1: 5])' лучше читать, но в принципе – mkiever

+2

'l [4: 0: -1]' будет более эффективным, чем 'l [1: 5] [:: - 1]', поскольку он будет создавать новый список только один раз. –

Смежные вопросы