2016-10-18 3 views
-2

Я хочу обменивать последовательные элементы списка таким образом, чтобы первый элемент переходил к последнему. например, [4, 7, 3, 4, 3] должен печатать как [7,3,4,3,4] Это код, который я написал, но он не работает правильно. Как я могу изменить его, чтобы заставить его работать?Python - своп последовательных элементов списка?

ls = [4, 7, 3, 4, 3] 
i=0 
b=1 
while i+1<len(ls): 
    ls[i]=a 
    ls[i]=ls[i+1] 
    ls[i+1]=a 
    i+=1 
print ls 

Я не хочу просто переключать первый элемент на последний. Я хочу изменить этот код дальше, чтобы создать алгоритм сортировки пузырьков, я просто смущен тем, как сделать то, что я только что объяснил.

Обновлено: Спасибо за ответ, что я должен изменить «ls [i] = a» с «a = ls [i]», но может ли кто-нибудь объяснить мне, как это отличается от логики?

+1

* "не работает правильно" *? – jonrsharpe

+0

Можете ли вы пояснить «своп последовательных элементов списка»? Как это происходит с заменой последовательных элементов? – mgilson

+0

печатает [7, 3, 4, 3, 8] вместо [7,3,4,3,4] – HogRider123

ответ

2

Python позволяет работать с lists, выбрав в то время один или несколько элементов и сцепить содержание list

ls = [4, 7, 3, 4, 3] 
new_list_with_first_element_at_the_end = ls[1:] + [ls[0]] 
+0

В принципе да, но ... Вы попробовали это? –

+0

Да, вы можете добавить только последовательность и 'ls [0]' не список. Должно быть '... + [ls [0]]' – kindall

3

Вам не нужен цикл для перемещения первого элемента до последнего. Просто вытащите первый элемент из списка, а затем добавьте его.

ls.append(ls.pop(0)) 
+0

Я знаю, что могу это сделать, но хочу поменять элементы один за другим в парах слева направо – HogRider123

+0

, если вы не передадите индекс, то он удалит элемент в этот индекс. –

+1

@PatrickHaugh "list.pop ([i]) Удалите элемент в указанной позиции в списке и верните его. Если индекс не указан, a.pop() удаляет и возвращает последний элемент в списке." – kindall

1

Если вы действительно чувствуете, что вы должны, сделать swap функцию:

def swap(l, i, j): 
    tmp = l[j] 
    l[j] = i 
    l[i] = tmp 

Тогда вы можете:

for i in range(len(l)-1): 
    swap(l, i, i+1)