How do I get the last element of a list?
Which way is preferred?
alist[-1]
alist[len(alist) - 1]
some_list[-1]
is the shortest and most Pythonic.
In fact, you can do much more with this syntax. The some_list[-n]
syntax gets the nth-to-last element. So some_list[-1]
gets the last element, some_list[-2]
gets the second to last, etc, all the way down to some_list[-len(some_list)]
, which gives you the first element.
You can also set list elements in this way. For instance:
>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]
Note that getting a list item by index will raise an IndexError
if the expected item doesn't exist. This means that some_list[-1]
will raise an exception if some_list
is empty, because an empty list can't have a last element.
Answered 2023-09-20 20:25:35
If your str()
or list()
objects might end up being empty as so: astr = ''
or alist = []
, then you might want to use alist[-1:]
instead of alist[-1]
for object "sameness".
The significance of this is:
alist = []
alist[-1] # will generate an IndexError exception whereas
alist[-1:] # will return an empty list
astr = ''
astr[-1] # will generate an IndexError exception whereas
astr[-1:] # will return an empty str
Where the distinction being made is that returning an empty list object or empty str object is more "last element"-like then an exception object.
Answered 2023-09-20 20:25:35
if len(my_vector) == 0 or my_vector[-1] != update_val
is a workable pattern. but it's certainly not a global solution - it would be nice to have a syntax form where None was the result - anyone xs[-1] if xs else None
- anyone You can also do:
last_elem = alist.pop()
It depends on what you want to do with your list because the pop()
method will delete the last element.
Answered 2023-09-20 20:25:35
The simplest way to display last element in python is
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
there are many other method to achieve such a goal but these are short and sweet to use.
Answered 2023-09-20 20:25:35
list[-1]
will error. - anyone In Python, how do you get the last element of a list?
To just get the last element,
pass -1
to the subscript notation:
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
Indexes and slices can take negative integers as arguments.
I have modified an example from the documentation to indicate which item in a sequence each index references, in this case, in the string "Python"
, -1
references the last element, the character, 'n'
:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
This method may unnecessarily materialize a second list for the purposes of just getting the last element, but for the sake of completeness (and since it supports any iterable - not just lists):
>>> *head, last = a_list
>>> last
'three'
The variable name, head is bound to the unnecessary newly created list:
>>> head
['zero', 'one', 'two']
If you intend to do nothing with that list, this would be more apropos:
*_, last = a_list
Or, really, if you know it's a list (or at least accepts subscript notation):
last = a_list[-1]
A commenter said:
I wish Python had a function for first() and last() like Lisp does... it would get rid of a lot of unnecessary lambda functions.
These would be quite simple to define:
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
Or use operator.itemgetter
:
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
In either case:
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
If you're doing something more complicated, you may find it more performant to get the last element in slightly different ways.
If you're new to programming, you should avoid this section, because it couples otherwise semantically different parts of algorithms together. If you change your algorithm in one place, it may have an unintended impact on another line of code.
I try to provide caveats and conditions as completely as I can, but I may have missed something. Please comment if you think I'm leaving a caveat out.
A slice of a list returns a new list - so we can slice from -1 to the end if we are going to want the element in a new list:
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
This has the upside of not failing if the list is empty:
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
Whereas attempting to access by index raises an IndexError
which would need to be handled:
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
But again, slicing for this purpose should only be done if you need:
for
loopsAs a feature of Python, there is no inner scoping in a for
loop.
If you're performing a complete iteration over the list already, the last element will still be referenced by the variable name assigned in the loop:
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
This is not semantically the last thing in the list. This is semantically the last thing that the name, item
, was bound to.
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
Thus this should only be used to get the last element if you
We can also mutate our original list by removing and returning the last element:
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
But now the original list is modified.
(-1
is actually the default argument, so list.pop
can be used without an index argument):
>>> a_list.pop()
'two'
Only do this if
These are valid use-cases, but not very common.
I don't know why you'd do it, but for completeness, since reversed
returns an iterator (which supports the iterator protocol) you can pass its result to next
:
>>> next(reversed([1,2,3]))
3
So it's like doing the reverse of this:
>>> next(iter([1,2,3]))
1
But I can't think of a good reason to do this, unless you'll need the rest of the reverse iterator later, which would probably look more like this:
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
and now:
>>> use_later
[2, 1]
>>> last_element
3
Answered 2023-09-20 20:25:35
To prevent IndexError: list index out of range
, use this syntax:
mylist = [1, 2, 3, 4]
# With None as default value:
value = mylist and mylist[-1]
# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'
# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
Answered 2023-09-20 20:25:35
False or 'default'
== 'default'
. I was expecting it to evaluate to False or bool('default')
== True
. Since when False or
and True and
yield the right-most element instead of casting everything to a boolean? It's a logical operation that doesn't yield a boolean, not very intuitive. - anyone lst[-1]
is the best approach, but with general iterables, consider more_itertools.last
:
Code
import more_itertools as mit
mit.last([0, 1, 2, 3])
# 3
mit.last(iter([1, 2, 3]))
# 3
mit.last([], "some default")
# 'some default'
Answered 2023-09-20 20:25:35
Another method:
some_list.reverse()
some_list[0]
Answered 2023-09-20 20:25:35
O(n)
also, even though you've the option to do in O(1)
. - anyone list(reversed(reversed(reversed(reversed(some_list)))))[-1]
works too but that does not make it a valid answer. - anyone Here is the solution for your query.
a=["first","second","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 second item in list
print(a[-1]) #prints the last item in the list.
print(a[-2]) #prints the second last item in the list.
Output:
>>> first
>>> second
>>> last
>>> second from last
Answered 2023-09-20 20:25:35
list[-1]
will retrieve the last element of the list without changing the list.
list.pop()
will retrieve the last element of the list, but it will mutate/change the original list. Usually, mutating the original list is not recommended.
Alternatively, if, for some reason, you're looking for something less pythonic, you could use list[len(list)-1]
, assuming the list is not empty.
Answered 2023-09-20 20:25:35
You can also use the code below, if you do not want to get IndexError when the list is empty.
next(reversed(some_list), None)
Answered 2023-09-20 20:25:35
Ok, but what about common in almost every language way items[len(items) - 1]
? This is IMO the easiest way to get last element, because it does not require anything pythonic knowledge.
Answered 2023-09-20 20:25:35
some_list[-1]
approach because it's more logical, and shows what it is actually doing better than some_list[-1]
in my opinion. - anyone Strange that nobody posted this yet:
>>> l = [1, 2, 3]
>>> *x, last_elem = l
>>> last_elem
3
>>>
Just unpack.
Answered 2023-09-20 20:25:35
METHOD 1:
L = [8, 23, 45, 12, 78]
print(L[len(L)-1])
METHOD 2:
L = [8, 23, 45, 12, 78]
print(L[-1])
METHOD 3:
L = [8, 23, 45, 12, 78]
L.reverse()
print(L[0])
METHOD 4:
L = [8, 23, 45, 12, 78]
print(L[~0])
METHOD 5:
L = [8, 23, 45, 12, 78]
print(L.pop())
All are outputting 78
Answered 2023-09-20 20:25:35
You can use ~
operator to get the ith element from end (indexed from 0).
lst=[1,3,5,7,9]
print(lst[~0])
Answered 2023-09-20 20:25:35
Accessing the last element from the list in Python:
1: Access the last element with negative indexing -1
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data[-1]
'w'
2. Access the last element with pop() method
>> data = ['s','t','a','c','k','o','v','e','r','f','l','o','w']
>> data.pop()
'w'
However, pop method will remove the last element from the list.
Answered 2023-09-20 20:25:35
.pop
is destructive (as clarified by other answers). It does not only get the last item from the list, but it removes it from the list as well - anyone lst=[1,3,5,7,9]
print(lst[-1])
9
Answered 2023-09-20 20:25:35
To avoid "IndexError: list index out of range", you can use this piece of code.
list_values = [12, 112, 443]
def getLastElement(lst):
if len(lst) == 0:
return 0
else:
return lst[-1]
print(getLastElement(list_values))
Answered 2023-09-20 20:25:35
len(lst) == 0
it would return a string, when you are waiting for an int. - anyone So lets consider that we have a list a = [1,2,3,4]
, in Python List can be manipulated to give us part of it or a element of it, using the following command one can easily get the last element.
print(a[-1])
Answered 2023-09-20 20:25:35
You can also use the length to get the last element:
last_elem = arr[len(arr) - 1]
If the list is empty, you'll get an IndexError
exception, but you also get that with arr[-1]
.
Answered 2023-09-20 20:25:35
If you do my_list[-1]
this returns the last element of the list. Negative sequence indexes represent positions from the end of the array. Negative indexing means beginning from the end, -1 refers to the last item, -2 refers to the second-last item, etc.
Answered 2023-09-20 20:25:35
You will just need to take the and put [-1] index. For example:
list=[0,1,2]
last_index=list[-1]
print(last_index)
You will get 2 as the output.
Answered 2023-09-20 20:25:35
You could use it with next
and iter
with [::-1]
:
>>> a = [1, 2, 3]
>>> next(iter(a[::-1]))
3
>>>
Answered 2023-09-20 20:25:35
array=[1,2,3,4,5,6,7]
last_element= array[len(array)-1]
last_element
Another simple solution
Answered 2023-09-20 20:25:35
Couldn't find any answer mentioning this. So adding.
You could try some_list[~0]
also.
That's the tilde symbol
Answered 2023-09-20 20:25:35