Ответ 1
a[2:4]
создает копию выбранного подсписчика, и эта копия меняется на a[2:4].reverse()
. Это не меняет исходный список. Строки списков Python всегда создают копии - вы можете использовать
b = a[:]
чтобы скопировать весь список.
Почему это не работает?
# to reverse a part of the string in place
a = [1,2,3,4,5]
a[2:4] = reversed(a[2:4]) # This works!
a[2:4] = [0,0] # This works too.
a[2:4].reverse() # But this doesn't work
a[2:4]
создает копию выбранного подсписчика, и эта копия меняется на a[2:4].reverse()
. Это не меняет исходный список. Строки списков Python всегда создают копии - вы можете использовать
b = a[:]
чтобы скопировать весь список.
Другим способом, который вы можете рассмотреть, является использование обратного фрагмента:
a[2:4] = a[3:1:-1]
Просто используйте срез и отмените его.
a[2:4] = a[2:4][::-1]
a [2: 4] - это копия списка a, которая построена с использованием 2,3,4 элементов в списке a. Первые два работают, потому что вы назначаете изменения в те пятна в исходном списке. Последний не работает, потому что вы не влияете на исходный список.
Здесь странный пример и более сложное решение, использующее нарезку и немного список основных принципов.
Проблема: Обратный список в двух частях.
I/P: [1,2,3,4,5,6]
O/P: [3,2,1,6,5,4]
SOLN:
[item for i in range(0,len(l),len(l)/2) for item in l[i:i+len(l)/2][::-1]]
Проблема. Отмените буквы имени someones.
Например, Гарри Портер
O/p: yrraH retroP
SOLN:
' '.join(map(lambda x:x[::-1], s.split()))