-10

Assume you have a list A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. In a single line of code, cut A in half and assign B to be a copy of A’s last half followed by the first half (i.e. B would be equal to [6, 7, 8, 9, 10, 1, 2, 3, 4, 5]).

3 Answers3

1

You can slice the list based on the length as:

>>> 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]

Refer linked post to know more about Python's slice notation

Community
  • 1
  • 1
Moinuddin Quadri
  • 46,825
  • 13
  • 96
  • 126
  • 1
    Just a quick note: `/2` returns a float on python3 and thus throws an error when you try to slice with it. You could use `//` to make it work on both py2 and py3 (see also my answer). – MSeifert Jan 14 '17 at 18:28
1

The three steps to solve this problems:

  • Calculating the mid. I assume that for unqueal sized lists the second half should be longer. Then you can simply use floor division: len(A) // 2.

  • You can slice from a specific index ([idx:]) and you can slice up to an index ([:idx]). These are just two applications of slicing, but the ones you need here.

  • You can concatenate lists by adding (+) them.

Putting all this together:

B = A[len(A)//2:] + A[:len(A)//2]   # second half + first half
MSeifert
  • 145,886
  • 38
  • 333
  • 352
0

The answer to your exact question with the list [1,2,3,4,5,6,7,8,9,10] is: split the list a from index 5 till the last and add the elements with index with 0 till 4. You can do this with the following code:

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

In general, in the sense, with n number of elements, the program can be written as:

a=[1,2,3,4,5,6,7,8,9,10]
l=len(a)
b=a[l/2:]+[0:l/2]
print b
bonyem
  • 1,148
  • 11
  • 20
  • If you use python3 your second example fails because `/2` returns a float. You can use `//` to force it to be an integer on py2 and py3 (see also my answer). – MSeifert Jan 14 '17 at 18:27