2017-01-13 2 views
-9

Предположим, у вас есть список A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. В одной строке кода разрезайте A пополам и назначьте B копией последней половины A, за которой следует первая половина (т.е. B будет равен [6, 7, 8, 9, 10, 1, 2, 3 , 4, 5]).как разбить и отсортировать список в python

+3

Начало здесь: http://stackoverflow.com/help/how-to-ask – ppovoski

ответ

1

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

>>> A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> B = A[-len(A)//2:] + A[:len(A)//2] 
>>> B 
[6, 7, 8, 9, 10, 1, 2, 3, 4, 5] 

См связанный пост, чтобы узнать больше о Python's slice notation

+1

Только быстрое примечание: '/ 2' возвращает поплавок на Python3 и, таким образом, выдает ошибку при попытке порезать с Это. Вы можете использовать '//', чтобы заставить его работать как с py2, так и с py3 (см. Также мой ответ). – MSeifert

+0

@MSeifert Это правда. спасибо за указание на это –

1

Три шага для решения этой проблемы:

  • Расчет в середине. Я предполагаю, что для списков с разным размером вторая половина должна быть длиннее. Тогда вы можете просто использовать разделение полов: len(A) // 2.

  • Вы можете отрезать определенный показатель ([idx:]), и вы можете отрезать его до индекса ([:idx]). Это всего лишь два приложения нарезки, но те, которые вам нужны здесь.

  • Вы можете объединить списки, добавив их (+).

Собираем все это вместе:

B = A[len(A)//2:] + A[:len(A)//2] # second half + first half 
0

ответ на ваш точный вопрос со списком [1,2,3,4,5,6,7,8,9,10] является : разделить список а из индекса 5 до последнего и добавить элементы с индексом с 0 до 4. Вы можете сделать это с помощью следующего кода:

a=[1,2,3,4,5,6,7,8,9,10] 
b=a[5:]+a[0:5] 

в целом, в том смысле, с п числом элементов, программа может быть записана как:

a=[1,2,3,4,5,6,7,8,9,10] 
l=len(a) 
b=a[l/2:]+[0:l/2] 
print b 
+0

Если вы используете python3, ваш второй пример не работает, потому что '/ 2' возвращает float. Вы можете использовать '//', чтобы заставить его быть целым числом на py2 и py3 (см. Также мой ответ). – MSeifert

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