The List Data Structure and its Functions in Python

In our last coding post, we discussed the concept of data structures in Python and the different types that you can expect to encounter in your data science journey. The list is the most basic kind of these data structures and in this post, we’ll take a deeper look at what it is along with special functions that you can use on it.

In Python, a list is a versatile and flexible data structure that can hold an ordered collection of items. These items can be of various types, such as numbers, strings, or even other lists. Python lists are dynamic, which means they can grow or shrink in size as you add or remove items. This is a very important characteristic, making lists some of the most utilized data structures in Python or any other programming language for that matter.

Uses of Lists in Python

Python lists are extremely versatile and serve a wide range of purposes in various programming scenarios. Here are some common uses of lists in Python, especially in the context of data science:

1. Storing and Accessing Data

Lists are commonly used to store collections of related data. They allow easy access to elements by their index, making them ideal for storing sequences of data like rows in a dataset or a collection of sensor readings.

2. Dynamic Data Storage

Unlike arrays in some other programming languages, Python lists can grow and shrink dynamically. This flexibility makes them perfect for situations where the size of the data collection is not known in advance, such as accumulating results from an experiment or processing an unknown number of user inputs.

3. Data Manipulation and Transformation

Lists provide powerful built-in functions and methods for data manipulation, such as sorting, reversing, and slicing. This capability is essential for tasks like cleaning and preparing data for analysis, where you often need to rearrange or filter elements.

4. Iteration and Looping

Lists are often used in loops to perform operations on each element, making them essential in tasks involving repetitive processes. This is particularly useful in data science for iterating over datasets to apply transformations, compute statistics, or visualize data.

5. Nested Lists and Multidimensional Arrays

Lists can contain other lists as elements, allowing the creation of nested lists or multidimensional arrays. This is useful for representing matrices, tables, or complex data structures, which are common in data science for tasks like numerical computations and storing multi-dimensional data.

6. List Comprehensions

List comprehensions provide a concise way to create lists based on existing lists. They are particularly useful for applying an operation to each element in a list and creating a new list with the results, making data transformation tasks more readable and efficient.

7. Aggregating Data

Lists are often used to aggregate data from multiple sources, allowing for easy combination and processing. For example, you can combine lists of values from different experiments or merge data from multiple files into a single list for analysis.

8. Implementing Stacks and Queues

Lists can be used to implement other data structures such as stacks (Last In, First Out) and queues (First In, First Out) using simple list operations. These structures are useful for managing data in scenarios where the order of processing matters, such as task scheduling or handling streams of data.

Python lists are an integral part of the language, enabling efficient and flexible data handling. Their versatility makes them suitable for a wide range of applications, from simple data storage to complex data manipulations, making them indispensable in the data science toolkit.

This section aims to provide an appreciation of the various roles that lists play in Python, highlighting their importance and utility in data science.

Key Features of Python Lists

The aforementioned uses of lists are possible thanks to some key characteristics of this data structure type, which are thankfully few and easy ti understand:

  1. Ordered. Items in a list have a specific order that remains consistent unless explicitly changed.
  2. Mutable. Lists can be modified after creation, allowing you to add, remove, or change items.
  3. Heterogeneous. A single list can contain items of different types, such as integers, strings, and other lists.
  4. Dynamic. Lists can adjust their size dynamically, expanding or contracting as needed.

Now that we have the concepts out of the way, let’s start coding.

Creating Lists in Python

Lists are one of the most versatile and widely used data structures in Python. They allow you to store and manage collections of items in an ordered and mutable fashion. Creating them is a pretty straightforward process that’s not too different from how we create variables. All we need is the name of the list, the equals sign (=) as the assignment operator, and values contained between open and closed square brackets [] separated by commas. Here are some examples:

Creating an Empty List

An empty list is created by simply using a pair of square brackets [].

# Creating an empty list
empty_list = []

Creating a List with Elements

You can create a list with elements by placing them inside square brackets, separated by commas. These elements can be of any data type, including integers, strings, floats, and even other lists.

Examples:

  • A list of integers:
numbers = [1, 2, 3, 4, 5]
  • A list of strings:
fruits = ["apple", "banana", "cherry"]
  • A mixed list with different data types:
mixed_list = [1, "hello", 3.14, True]

Creating Nested Lists

Lists can also contain other lists as elements, allowing you to create complex data structures such as matrices or nested collections.

Example:

  • A list of lists (nested list):
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Using the list() function

Another way to create a list is by using the list() function, which can convert other iterable data types (like tuples or strings) into a list.

Examples:

  • Converting a string to a list of characters:
char_list = list("hello")
# Output: ['h', 'e', 'l', 'l', 'o']
  • Converting a tuple to a list:
tuple_data = (1, 2, 3)
list_from_tuple = list(tuple_data)
# Output: [1, 2, 3]

Creating lists in Python is straightforward and forms the basis for many other operations you’ll perform in your programs. Whether you need to store a sequence of numbers, a collection of strings, or complex nested structures, lists provide a flexible and dynamic way to handle your data.

List Functions in Python

One of the great things about Python is that it comes with a lot of built-in functions that you don’t need to manually code in order to get it to do specific things with your list data. From accessing list values to modifying it, there’s bound to be a list function for just about any data management task that you can come across. Here’s a rundown of the most common ones, how to use them, and how to code them:

a. Length

The len() function returns the number of items in a list. This is useful for determining the size of a list, such as when you need to manage dynamic content. For instance, in a web application, you might want to display the number of items in a user’s shopping cart.

# Example list
tasks = ["write report", "attend meeting", "reply to emails"]
# Getting the length of the list
task_count = len(tasks)
print(f"You have {task_count} tasks to complete.")  # Output: You have 3 tasks to complete.

b. Min

The min() function returns the smallest item in the list. This function is particularly useful when you need to find the minimum value in a dataset, such as determining the lowest temperature recorded in a week.

# Example list
temperatures = [72, 68, 75, 70, 69]
# Getting the minimum value in the list
lowest_temp = min(temperatures)
print(f"The lowest temperature this week is {lowest_temp} degrees.")  # Output: The lowest temperature this week is 68 degrees.

c. Max

The max() function returns the largest item in the list. Similar to min(), it can be used to find the maximum value in a dataset. For example, it can help identify the highest score in a list of exam results.

# Example list
scores = [88, 92, 79, 85, 94]
# Getting the maximum value in the list
highest_score = max(scores)
print(f"The highest score in the exam is {highest_score}.")  # Output: The highest score in the exam is 94.

d. Calling Values by Position

Accessing a specific value in a list by its position is done using indexing. Indexing is crucial in scenarios where you need to retrieve specific data points. It’s important to note that Python uses zero-based indexing, meaning the first element is at index 0, the second element at index 1, and so on.

# Example list
inventory = ["laptop", "mouse", "keyboard", "monitor"]
# Accessing the third element (index 2, because indexing starts at 0)
third_item = inventory[2]
print(f"The third item in the inventory is {third_item}.")  # Output: The third item in the inventory is keyboard

e. Slicing

Slicing allows you to access a range of elements in a list. This is useful in many situations, such as extracting a subset of data from a larger dataset. The syntax is simple: simply call the list followed by square brackets and encolsoed within the brackets will be the index numbers of the value range. The value to the left will be the starting point in the slice of the index you want to retrieve. It will be followed by a colon which you can think of as the word “to” in this expression. The number to the right of the colon will be the stopping point in the slice.

When using slicing, Python stops at the value before the number to the right of the colon. It’s a quirk in Python syntax that many people find annoying, but it is what it is. See the example below:

# Example list
movies = ["Inception", "Matrix", "Interstellar", "Avengers", "Titanic"]
# Accessing the first three elements (indexes 0, 1, and 2; stops before index 3)
top_movies = movies[:3]
print(f"Top 3 movies: {top_movies}")  # Output: Top 3 movies: ['Inception', 'Matrix', 'Interstellar'] Because index position 3 is Avengers, the slice stops at the value just before it, which is Interstellar.

f. Negative Indices

Negative indices allow you to access elements from the end of the list to the beginning (in reversed order). This feature is particularly useful when you want to quickly access the last few elements without knowing the exact length of the list. For example, you can easily get the last transaction from a list of transactions.

# Example list
transactions = ["$200", "$150", "$300", "$450"]
# Accessing the last element (index -1)
last_transaction = transactions[-1]
print(f"The last transaction was {last_transaction}.")  # Output: The last transaction was $450
# Accessing the second last element (index -2)
second_last_transaction = transactions[-2]
print(f"The second last transaction was {second_last_transaction}.")  # Output: The second last transaction was $300

g. Pop

The pop() method removes and returns the element at the specified index. This function is useful in scenarios where you need to process and remove items from a list, such as processing tasks from a task list.

# Example list
pending_tasks = ["task1", "task2", "task3"]
# Removing and returning the last item (default pop without index)
last_task = pending_tasks.pop()
print(f"Processing last task: {last_task}")  # Output: Processing last task: task3
print(f"Remaining tasks: {pending_tasks}")  # Output: Remaining tasks: ['task1', 'task2']
# Removing and returning the item at index 1
second_task = pending_tasks.pop(1)
print(f"Processing second task: {second_task}")  # Output: Processing second task: task2
print(f"Remaining tasks: {pending_tasks}")  # Output: Remaining tasks: ['task1']

h. Append

The append() method adds an item to the end of the list. This is great for dynamically building lists, such as adding new messages to a chat log.

# Example list
contacts = ["Alice", "Bob", "Charlie"]
# Adding an item to the list
contacts.append("David")
print(f"Updated contacts list: {contacts}")  # Output: Updated contacts list: ['Alice', 'Bob', 'Charlie', 'David']

i. Checking if an Item Exists in a List

You can use the in keyword to check if an item exists in a list. This is useful when verifying the presence of specific items, such as checking if a particular ingredient is in a recipe list.

# Example list
shopping_list = ["milk", "eggs", "bread"]
# Checking if an item exists in the list
milk_in_list = "milk" in shopping_list
butter_in_list = "butter" in shopping_list
print(f"Is milk in the shopping list? {milk_in_list}")  # Output: Is milk in the shopping list? True
print(f"Is butter in the shopping list? {butter_in_list}")  # Output: Is butter in the shopping list? False

And there you have it, some of the more basic functions that you can use for lists in Python. Next up, we’ll be discussing other data structure types that you’ll be using as we go along with our data science lessons. Stay tuned.

About Glen Dimaandal

Picture of Glen Dimaandal
Glen Dimaandal is a data scientist from the Philippines. He has a post-graduate degree in Data Science and Business Analytics from the prestigious McCombs School of Business in the University of Texas, Austin. He has nearly 20 years of experience in the field as he worked with major brands from the US, UK, Australia and the Asia-Pacific. Glen is also the CEO of SearchWorks.PH, the Philippines' most respected SEO agency.
Picture of Glen Dimaandal
Glen Dimaandal is a data scientist from the Philippines. He has a post-graduate degree in Data Science and Business Analytics from the prestigious McCombs School of Business in the University of Texas, Austin. He has nearly 20 years of experience in the field as he worked with major brands from the US, UK, Australia and the Asia-Pacific. Glen is also the CEO of SearchWorks.PH, the Philippines' most respected SEO agency.
ARTICLE & NEWS

Check our latest news

In data science, saving progress is essential. Just like saving your progress in a video game…

In our last lesson, we introduced the concept of Python packages and NumPy in particular. Short…

Now that we have a solid handle on basic Python programming, we can move on to…

Ready to get started?

Reveal the untapped potential of your data. Start your journey towards data-driven decision making with Griffith Data Innovations today.