How do you print the last half of a list in python?

I am looking for a way to easily split a python list in half.

So that if I have an array:

A = [0,1,2,3,4,5]

I would be able to get:

B = [0,1,2]

C = [3,4,5]

How do you print the last half of a list in python?

asked Apr 15, 2009 at 15:44

How do you print the last half of a list in python?

A = [1,2,3,4,5,6]
B = A[:len(A)//2]
C = A[len(A)//2:]

If you want a function:

def split_list(a_list):
    half = len(a_list)//2
    return a_list[:half], a_list[half:]

A = [1,2,3,4,5,6]
B, C = split_list(A)

maxymoo

33.7k9 gold badges90 silver badges115 bronze badges

answered Apr 15, 2009 at 15:49

How do you print the last half of a list in python?

Jason CoonJason Coon

16.9k10 gold badges39 silver badges50 bronze badges

2

A little more generic solution (you can specify the number of parts you want, not just split 'in half'):

def split_list(alist, wanted_parts=1):
    length = len(alist)
    return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts] 
             for i in range(wanted_parts) ]

A = [0,1,2,3,4,5,6,7,8,9]

print split_list(A, wanted_parts=1)
print split_list(A, wanted_parts=2)
print split_list(A, wanted_parts=8)

How do you print the last half of a list in python?

answered Apr 15, 2009 at 16:30

ChristopheDChristopheD

109k27 gold badges160 silver badges177 bronze badges

8

f = lambda A, n=3: [A[i:i+n] for i in range(0, len(A), n)]
f(A)

n - the predefined length of result arrays

Rod

49.6k3 gold badges34 silver badges53 bronze badges

answered Feb 7, 2010 at 2:30

JaroJaro

7536 silver badges10 bronze badges

1

def split(arr, size):
     arrs = []
     while len(arr) > size:
         pice = arr[:size]
         arrs.append(pice)
         arr   = arr[size:]
     arrs.append(arr)
     return arrs

Test:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print(split(x, 5))

result:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]

How do you print the last half of a list in python?

Lavande

67910 silver badges16 bronze badges

answered Apr 18, 2014 at 6:54

How do you print the last half of a list in python?

SiamandSiamand

1,06010 silver badges18 bronze badges

2

If you don't care about the order...

def split(list):  
    return list[::2], list[1::2]

list[::2] gets every second element in the list starting from the 0th element.
list[1::2] gets every second element in the list starting from the 1st element.

AGS

14.2k5 gold badges50 silver badges65 bronze badges

answered Jun 13, 2011 at 9:11

sentytheesentythee

3112 silver badges2 bronze badges

2

Using list slicing. The syntax is basically my_list[start_index:end_index]

>>> i = [0,1,2,3,4,5]
>>> i[:3] # same as i[0:3] - grabs from first to third index (0->2)
[0, 1, 2]
>>> i[3:] # same as i[3:len(i)] - grabs from fourth index to end
[3, 4, 5]

To get the first half of the list, you slice from the first index to len(i)//2 (where // is the integer division - so 3//2 will give the floored result of1, instead of the invalid list index of1.5`):

>>> i[:len(i)//2]
[0, 1, 2]

..and the swap the values around to get the second half:

>>> i[len(i)//2:]
[3, 4, 5]

answered Apr 15, 2009 at 16:28

dbrdbr

161k65 gold badges273 silver badges340 bronze badges

2

B,C=A[:len(A)/2],A[len(A)/2:]

answered Apr 15, 2009 at 15:50

John MontgomeryJohn Montgomery

8,5484 gold badges33 silver badges42 bronze badges

2

Here is a common solution, split arr into count part

def split(arr, count):
     return [arr[i::count] for i in range(count)]

answered Jul 20, 2012 at 7:17

Chris SongChris Song

1591 silver badge9 bronze badges

1

def splitter(A):
    B = A[0:len(A)//2]
    C = A[len(A)//2:]

 return (B,C)

I tested, and the double slash is required to force int division in python 3. My original post was correct, although wysiwyg broke in Opera, for some reason.

answered Apr 15, 2009 at 15:49

How do you print the last half of a list in python?

Stefan KendallStefan Kendall

64.7k66 gold badges247 silver badges402 bronze badges

1

If you have a big list, It's better to use itertools and write a function to yield each part as needed:

from itertools import islice

def make_chunks(data, SIZE):
    it = iter(data)
    # use `xragne` if you are in python 2.7:
    for i in range(0, len(data), SIZE):
        yield [k for k in islice(it, SIZE)]

You can use this like:

A = [0, 1, 2, 3, 4, 5, 6]

size = len(A) // 2

for sample in make_chunks(A, size):
    print(sample)

The output is:

[0, 1, 2]
[3, 4, 5]
[6]

Thanks to @thefourtheye and @Bede Constantinides

answered Dec 30, 2018 at 9:10

There is an official Python receipe for the more generalized case of splitting an array into smaller arrays of size n.

from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

This code snippet is from the python itertools doc page.

answered Apr 21, 2011 at 21:44

This is similar to other solutions, but a little faster.

# Usage: split_half([1,2,3,4,5]) Result: ([1, 2], [3, 4, 5])

def split_half(a):
    half = len(a) >> 1
    return a[:half], a[half:]

answered May 27, 2014 at 17:17

1

10 years later.. I thought - why not add another:

arr = 'Some random string' * 10; n = 4
print([arr[e:e+n] for e in range(0,len(arr),n)])

answered Feb 26, 2019 at 19:22

RoyMRoyM

1,0481 gold badge8 silver badges26 bronze badges

While the answers above are more or less correct, you may run into trouble if the size of your array isn't divisible by 2, as the result of a / 2, a being odd, is a float in python 3.0, and in earlier version if you specify from __future__ import division at the beginning of your script. You are in any case better off going for integer division, i.e. a // 2, in order to get "forward" compatibility of your code.

answered Apr 15, 2009 at 19:03

#for python 3
    A = [0,1,2,3,4,5]
    l = len(A)/2
    B = A[:int(l)]
    C = A[int(l):]       

answered Oct 5, 2017 at 20:43

How do you print the last half of a list in python?

SuperGuy10SuperGuy10

4315 silver badges5 bronze badges

General solution split list into n parts with parameter verification:

def sp(l,n):
    # split list l into n parts 
    if l: 
        p = len(l) if n < 1 else len(l) // n   # no split
        p = p if p > 0 else 1                  # split down to elements
        for i in range(0, len(l), p):
            yield l[i:i+p]
    else:
        yield [] # empty list split returns empty list

answered Apr 26, 2021 at 6:22

Since there was no restriction put on which package we can use.. Numpy has a function called split with which you can easily split an array any way you like.

Example

import numpy as np
A = np.array(list('abcdefg'))
np.split(A, 2)

answered Aug 29 at 9:26

zwepzwep

1,12511 silver badges26 bronze badges

With hints from @ChristopheD

def line_split(N, K=1):
    length = len(N)
    return [N[i*length/K:(i+1)*length/K] for i in range(K)]

A = [0,1,2,3,4,5,6,7,8,9]
print line_split(A,1)
print line_split(A,2)

answered Aug 2, 2012 at 4:24

PunjCoderPunjCoder

4301 gold badge4 silver badges10 bronze badges

Another take on this problem in 2020 ... Here's a generalization of the problem. I interpret the 'divide a list in half' to be .. (i.e. two lists only and there shall be no spillover to a third array in case of an odd one out etc). For instance, if the array length is 19 and a division by two using // operator gives 9, and we will end up having two arrays of length 9 and one array (third) of length 1 (so in total three arrays). If we'd want a general solution to give two arrays all the time, I will assume that we are happy with resulting duo arrays that are not equal in length (one will be longer than the other). And that its assumed to be ok to have the order mixed (alternating in this case).

"""
arrayinput --> is an array of length N that you wish to split 2 times
"""
ctr = 1 # lets initialize a counter

holder_1 = []
holder_2 = []

for i in range(len(arrayinput)): 

    if ctr == 1 :
        holder_1.append(arrayinput[i])
    elif ctr == 2: 
        holder_2.append(arrayinput[i])

    ctr += 1 

    if ctr > 2 : # if it exceeds 2 then we reset 
        ctr = 1 

This concept works for any amount of list partition as you'd like (you'd have to tweak the code depending on how many list parts you want). And is rather straightforward to interpret. To speed things up , you can even write this loop in cython / C / C++ to speed things up. Then again, I've tried this code on relatively small lists ~ 10,000 rows and it finishes in a fraction of second.

Just my two cents.

Thanks!

answered May 28, 2020 at 5:04

How do you print the last half of a list in python?

aaronlheaaronlhe

9749 silver badges15 bronze badges

from itertools import islice 

Input = [2, 5, 3, 4, 8, 9, 1] 
small_list_length = [1, 2, 3, 1] 

Input1 = iter(Input) 

Result = [list(islice(Input1, elem)) for elem in small_list_length] 

print("Input list :", Input) 

print("Split length list: ", small_list_length) 

print("List after splitting", Result)

How do you print the last half of a list in python?

RiveN

2,50311 gold badges10 silver badges24 bronze badges

answered Oct 22, 2021 at 17:04

How do you print the last half of a list in python?

1

How do you print half the list in Python?

Split the list in half. Call len(iterable) with iterable as a list to find its length. Floor divide the length by 2 using the // operator to find the middle_index of the list. Use the slicing syntax list[:middle_index] to get the first half of the list and list[middle_index:] to get the second half of the list.

How do I get the last part of a list in Python?

The best way to get the last element of a list in Python is using the list[-1]. Python allows you to use negative indices, which count from the end of the list instead of the beginning. So list[-1] gets the last element, list[-2] gets the second to last.

How do you print the last two elements of a list in Python?

Method #2 : Using islice() + reversed() The inbuilt functions can also be used to perform this particular task. The islice function can be used to get the sliced list and reversed function is used to get the elements from rear end.

How do you print the last item in Python?

a=["first","second from last","last"] # A sample list print(a[0]) #prints the first item in the list because the index of the list always starts from 0. print(a[-1]) #prints the last item in the list.