Python List
Python List is an ordered sequence of elements.
Furthermore:
- Python lists are mutable, meaning that the value of elements in a list can be changed.
- It is not necessary that all elements in a list be of the same type.
Create Python Lists
In Python, a list is created by placing elements inside square brackets []
, separated by commas.
# list of integers
my_list = [1, 2, 3]
A list can have any number of items and they may be of different types (like integer, float, string, etc.).
# empty list
my_list = []
# list with elements of different datatypes
my_list = [1, "a string", 2.3]
Lists can be nested (a list can also have another list as an item).
# nested list
my_list = ["a string", ['nested', 1, 2], [(10,20,30)]]
Access List Elements
There are several ways to access elements in a list.
with List Index
The index operator []
is used to access an element in a list.
- In Python, the list index starts from 0.
- The index must be an integer. Using values of any other type will result in a
TypeError
. - Nested lists are accessed using nested indexing.
If you attempt to access elements outside the index bounds, an IndexError
is generated.
my_list = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l']
# first item
print(my_list[0]) # t
# second item
print(my_list[1]) # u
# fifth item
print(my_list[4]) # r
# TypeError! Only integer can be used for indexing
print(my_list[4.0])
# Nested List
nested_list = ["string", [2, 0, 1, 5]]
# Nested indexing
print(nested_list[0][1]) # t
print(nested_list[1][3]) # 5
with Negative List Index
Python allows negative indexing for its sequences.
The index of -1 refers to the last item, -2 to the second last item and so on.
my_list = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l']
# last item
print(my_list[-1]) # l
# fifth last item
print(my_list[-4]) # r
Slicing
A range of elements in a list can be accessed using the slicing operator :
.
In [from:to]
syntax, the initial index is inclusive but the final index is exclusive.
The possible cases (with examples) are shown in the table below:
Slice | Description | Example with li=[10,20,30,40] |
---|---|---|
my_list[from:to] | the elements from from to to-1 | li[1:3] -> [20,30] |
my_list[from:] | the elements from from to the end of the list | li[2:] -> [30,40] |
my_list[:to] | the elements from the beginning of the list to the element to-1 | li[:3] -> [10,20,30] |
my_list[:] | all elements | li[:] -> [10,20,30,40] |
my_list[from:to:step] | one element each step from from to to-1 | li[0:3:2] -> [10,30] |
my_list[from::step] | one item each step from from until the end of the list | li[1::2] -> [20,40] |
my_list[:to:step] | one element each step from the beginning to the to-1 element. | li[:3:2] -> [10,30] |
my_list[::step] | one item each step | li[::2] -> [10,30] |
List Manipulation
Lists are mutable, meaning their elements can be changed (unlike string or tuple).
Add List Elements
You can add one item to a list with the append()
method or add multiple items with the extend()
method.
odd_list = [1, 3, 5]
odd_list.append(7) # Append item to odd_list
print(odd_list) # [1, 3, 5, 7]
odd_list.extend([9, 11, 13]) # Append list to odd_list
print(odd_list) # [1, 3, 5, 7, 9, 11, 13]
As an alternative to the extend()
function, the concatenation operator +
can be used to combine two lists.
Also, using the *
operator, elements of a list can be repeated a specific number of times to create a new list.
odd_list = [1, 3, 5]
concat_list = odd_list + [5, 9, 7] # Concat with +
print(concat_list) # [1, 3, 5, 5, 9, 7]
repeated = ["re"] * 3 # Repeat list three times
print(repeated) # ['re', 're', 're']
In addition, we can insert an element at a desired position using the insert()
method or insert multiple elements by compressing them into an empty slice of a list.
# Demonstration of list insert() method
odd_list = [1, 9]
odd_list.insert(1,3)
print(odd_list) # [1, 3, 9]
odd_list[2:2] = [5, 7]
print(odd_list) # [1, 3, 5, 7, 9]
Change List Elements
You can use the assignment operator =
to modify an element or range of elements.
my_list = [2, 4, 6, 8]
my_list[0] = 1 # change the 1st item
print(my_list) # [1, 4, 6, 8]
# change 2nd to 4th items
my_list[1:4] = [3, 5, 7]
print(my_list) # [1, 3, 5, 7]
Delete List Elements
You can delete one or more items from a list using Python's del
statement. It can also delete the list completely.
my_list = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l']
del my_list[2] # delete one item
print(my_list) # ['t', 'u', 'o', 'r', 'i', 'a', 'l']
del my_list[1:5] # delete multiple items
print(my_list) # ['t', 'a', 'l']
del my_list # delete the entire list
# Error: List not defined
print(my_list)
The remove()
function is used to remove the given element and pop()
function is used to remove an element at the given index.
The pop()
method removes and returns the last item if the index is not provided. This is useful to implement stacks using lists.
And the clear()
function is used to empty the whole list.
my_list = ['t','u','t','o','r','i','a','l']
my_list.remove('t')
print(my_list) # ['u', 't', 'o', 'r', 'i', 'a', 'l']
print(my_list.pop(1)) # t
print(my_list) # ['u', 'o', 'r', 'i', 'a', 'l']
print(my_list.pop()) # l
print(my_list) # ['u', 'o', 'r', 'i', 'a']
my_list.clear()
print(my_list) # []
Finally, you can delete items from a list by assigning an empty list to a slice of items.
my_list = ['t','u','t','o','r','i','a','l']
my_list[4:6] = []
print(my_list) # ['t', 'u', 't', 'o', 'a', 'l']
my_list[2:] = []
print(my_list) # ['t', 'u']
List Comprehension
List comprehension is an elegant and concise way to create a new list from an existing list in Python.
A list comprehension consists of an expression followed by for statement inside square brackets.
For example, make a list with each element multiplied by 10:
mult = [10 * x for x in range(10)]
print(mult) # [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
and this code is equivalent to:
mult = []
for x in range(10):
mult.append(10 * x)
print(mult)
A list comprehension can optionally contain more for
or if statements. An optional if
statement can filter out items for the new list.
For example:
pow2 = [2 ** x for x in range(10) if x > 5]
print(pow2)
# Output [64, 128, 256, 512]
odd = [x for x in range(10) if x % 2 == 1]
print(odd)
# Output [1, 3, 5, 7, 9]
strings = [x+y for x in ['Python ','C '] for y in ['Language','Programming']]
print(strings) # ['Python Language', 'Python Programming', 'C Language', 'C Programming']
See Python List Comprehension to learn more.
Other List Operations
List Membership Test
The keyword in
is used to check whether an item exists in a list.
my_list = ['t','u','t','o','r','i','a','l']
print('t' in my_list) # True
print('e' in my_list) # False
print('c' not in my_list) # True
Iterating Through a List
Using a for
loop, it is possible to iterate each element of a list.
for color in ['red','blue','yellow']:
print("I'm wearing a", color, "t-shirt")
Output
I'm wearing a red t-shirt
I'm wearing a blue t-shirt
I'm wearing a yellow t-shirt
See Python For Loop to learn more.
Summary of Python List Methods
Python has many useful list methods that make it very easy to work with lists.
The following are some of the commonly used list methods.
Method | Description |
---|---|
append() | adds an element to the end of the list |
clear() | removes all items from the list |
copy() | returns a shallow copy of the list |
count() | returns the count of the number of items passed as an argument |
extend() | adds all elements of a list to another list |
index() | returns the index of the first matched item |
insert() | inserts an item at the defined index |
pop() | returns and removes an element at the given index |
remove() | removes an item from the list |
reverse() | reverse the order of items in the list |
sort() | sort items in a list in ascending order |
Learn more in Python List Methods reference.