Python Lists are ordered collections of items, where each item can be of any data type, and they are enclosed within square brackets []. Lists support various operations such as appending, indexing, slicing, and iterating. They can contain heterogeneous data types, allowing flexibility in storing different kinds of elements like integers, strings, floats, or even other lists (nested lists). In addition, they are mutable, meaning their elements can be changed after creation, making them versatile for dynamic data storage and manipulation. Furthermore, they support indexing and slicing to access elements or sublists; and have their own methods, which we will see below.
Dataset:
basketball_champions= ['Los Angeles Lakers',17,'Boston Celtics',17,'Golden State Warriors',7,'Chicago Bulls',6,'San Antonio Spurs',5,'Philadelphia 76ers',3,'Detroit Pistons',3,'Miami Heat',3,'New York Knicks',2,'Houston Rockets',2,'Milwaukee Bucks',2,'Cleveland Cavaliers',1,'Atlanta Hawks',1,'Washington Wizards',1,'Oklahoma City Thunder',1,'Portland Trail Blazers',1,'Dallas Mavericks',1,'Sacramento Kings',1,'Toronto Raptors',1,'Denver Nuggets',1]
1. Subsetting Lists
1.1. Single Element
# number of elements/items in a listnum =len(basketball_champions)print(f"Number of elements: {num}")# 40# last elementtry:print(basketball_champions[40])# error, indexing start at 0exceptIndexError:print("Oops! Out of Index!")# last element (again)print(basketball_champions[39])#or print(basketball_champions[num-1])#or (preferrable)print(basketball_champions[-1])# first elementprint(basketball_champions[0])# OUTPUT"""Number of elements: 40Oops! Out of Index!111Los Angeles Lakers"""
1.2. Multiple Elements (Slicing)
# print first two teams with their championshipsprint(basketball_champions[0:4])# print last two teams with their championshipsprint(basketball_champions[-4:])# print only teamsprint(basketball_champions[::2])# OUTPUT"""['Los Angeles Lakers', 17, 'Boston Celtics', 17]['Toronto Raptors', 1, 'Denver Nuggets', 1]['Los Angeles Lakers', 'Boston Celtics', 'Golden State Warriors', 'Chicago Bulls', 'San Antonio Spurs']"""
2. Updating Lists
2.1. Changing list elements
# change championship for Lakers to 25basketball_champions[1]=25print(basketball_champions[:2])# increase championship for Denver Nuggetsbasketball_champions[-1]=2print(basketball_champions[-2:])# OUTPUT"""['Los Angeles Lakers', 25]['Denver Nuggets', 2]"""
2.2. Adding and removing elements
# adding Phoenix Suns with 0 championships to our listbasketball_champions += ['Phoenix Suns',0]print(basketball_champions[-6:])# 1.Deleting by Index# a. using del# deleting 'Phoenix Suns' and its championships value from the listdel basketball_champions[-2:]print(basketball_champions[-6:])# b. using .pop()# deleting the last element will be deleted basketball_champions.pop()# if no index given, then the last element will be deleted# or the same as basketball_champions.pop(-1)print(basketball_champions[-6:])# Deleting by Value# removing a specific item (first occurence of that item!)basketball_champions.remove('Denver Nuggets')print(basketball_champions[-6:])# OUTPUT"""['Toronto Raptors', 1, 'Denver Nuggets', 2, 'Phoenix Suns', 0]['Sacramento Kings', 1, 'Toronto Raptors', 1, 'Denver Nuggets', 2][1, 'Sacramento Kings', 1, 'Toronto Raptors', 1, 'Denver Nuggets']['Dallas Mavericks', 1, 'Sacramento Kings', 1, 'Toronto Raptors', 1]"""
In python del isa keyword and remove(), pop() are in-built methods (see section #3 for more methods). The difference between del and pop() is that even though they both delete the values at a particular index, pop() returns the deleted value:
del basketball_champions[0]# No OUTPUTbasketball_champions.pop(0)# OUTPUT: 'Los Angeles Lakers'
3. List Methods
Method
Description
Adds an element at the end of the list
Removes all the elements from the list
Returns a copy of the list
Returns the number of elements with the specified value
Add the elements of a list (or any iterable), to the end of the current list
Returns the index of the first element with the specified value
Adds an element at the specified position
Removes the element at the specified position
Removes the first item with the specified value
Reverses the order of the list
Sorts the list
Click on the methods practice them on W3schools
# insert Chicago Bulls and 99 to the listbasketball_champions.insert(0,'Chicago Bulls')basketball_champions.insert(1,99)print(basketball_champions[:6])# retrieve Chicago Bulls indexprint(basketball_champions.index('Chicago Bulls'))# retrieve Chicago Bulls' original indexprint(basketball_champions.index('Chicago Bulls',1))# count the frequency of a specific valueprint(f'Number of "Chicago Bulls" entries: {basketball_champions.count("Chicago Bulls")}')print(f"Number of teams with single championships: {basketball_champions.count(1)}")# OUTPUT"""['Chicago Bulls', 99, 'Los Angeles Lakers', 17, 'Boston Celtics', 17]08Number of "Chicago Bulls" entries: 2Number of teams with single championships: 9"""# delete Chicago Bulls with 99 championshipsbasketball_champions.pop(0)basketball_champions.pop(0)
Lists are great data types to store data; however, they fall short when it comes to arithmetic:
# extract championships only to do arithmeticchamps = basketball_champions[1::2]print(champs)# multiply each element with itselfchamps * champs# OUTPUT"""[17, 17, 7, 6, 5, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]---------------------------------------------------------------------------TypeError Traceback (most recent call last)Cell In[76], line 4 1 champs = basketball_champions[1::2] 2 print(champs)----> 4 champs * champsTypeError: can't multiply sequence by non-int of type 'list'"""
To do such calculation we need the help of a for loop:
# elementwise multiplicationch_ch = [i*i for i in champs]print(ch_ch)# OUTPUT"""[289, 289, 49, 36, 25, 9, 9, 9, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1]"""
A better approach would be to use the Numpy package! We first convert our list to a numpy array and then can do the multiplication without having use of a for loop.
Python lists are versatile data structures that can hold a collection of elements of different types. They are mutable, meaning we can modify their contents after creation. Lists support indexing and slicing to access elements or sublists and have built-in methods to operate on them more easily. They are dynamic in size and can grow or shrink as needed, making them a fundamental building block for many Python programs.
All being said, because of the nature of the dataset we used (i.e. having only pairs of 'team' and 'championships') it is better if we use another Python's data structure called Dictionary.