Python lists are ordered, mutable collections that can store multiple items of different data types. Unlike arrays in other programming languages, Python lists are dynamic and can grow or shrink during runtime. Python lists are defined using square brackets []
and can contain integers, strings, floats, booleans, and even other lists.
# Creating a simple Python list
my_list = [1, 2, 3, 4, 5]
print(my_list) # Output: [1, 2, 3, 4, 5]
There are several ways to create Python lists. The most common method is using square brackets with comma-separated values.
empty_list = []
print(empty_list) # Output: []
mixed_list = [1, "hello", 3.14, True, [1, 2, 3]]
print(mixed_list) # Output: [1, 'hello', 3.14, True, [1, 2, 3]]
numbers = list([10, 20, 30, 40])
print(numbers) # Output: [10, 20, 30, 40]
Python lists use zero-based indexing, meaning the first element is at index 0. You can access elements using square bracket notation.
fruits = ["apple", "banana", "orange", "grape"]
print(fruits[0]) # Output: apple
print(fruits[2]) # Output: orange
Python lists support negative indexing, where -1 refers to the last element.
colors = ["red", "green", "blue", "yellow"]
print(colors[-1]) # Output: yellow
print(colors[-2]) # Output: blue
List slicing allows you to extract portions of Python lists using the syntax [start:end:step]
.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:6]) # Output: [2, 3, 4, 5]
print(numbers[:5]) # Output: [0, 1, 2, 3, 4]
print(numbers[3:]) # Output: [3, 4, 5, 6, 7, 8, 9]
print(numbers[::2]) # Output: [0, 2, 4, 6, 8]
Python lists are mutable, which means you can change their contents after creation.
animals = ["cat", "dog", "bird"]
animals[1] = "fish"
print(animals) # Output: ['cat', 'fish', 'bird']
scores = [85, 90, 78, 92, 88]
scores[1:4] = [95, 82, 97]
print(scores) # Output: [85, 95, 82, 97, 88]
Python lists come with numerous built-in methods that make data manipulation easier and more efficient.
The append()
method adds a single element to the end of Python lists.
shopping_cart = ["milk", "bread"]
shopping_cart.append("eggs")
print(shopping_cart) # Output: ['milk', 'bread', 'eggs']
The insert()
method adds an element at a specific position in Python lists.
subjects = ["math", "science", "english"]
subjects.insert(1, "history")
print(subjects) # Output: ['math', 'history', 'science', 'english']
The extend()
method adds multiple elements to Python lists.
primary_colors = ["red", "blue", "yellow"]
secondary_colors = ["green", "orange", "purple"]
primary_colors.extend(secondary_colors)
print(primary_colors) # Output: ['red', 'blue', 'yellow', 'green', 'orange', 'purple']
The remove()
method removes the first occurrence of a specified value from Python lists.
inventory = ["laptop", "mouse", "keyboard", "mouse", "monitor"]
inventory.remove("mouse")
print(inventory) # Output: ['laptop', 'keyboard', 'mouse', 'monitor']
The pop()
method removes and returns an element from Python lists. By default, it removes the last element.
stack = [1, 2, 3, 4, 5]
removed_item = stack.pop()
print(f"Removed: {removed_item}") # Output: Removed: 5
print(stack) # Output: [1, 2, 3, 4]
# Pop from specific index
first_item = stack.pop(0)
print(f"Removed: {first_item}") # Output: Removed: 1
print(stack) # Output: [2, 3, 4]
The index()
method returns the index of the first occurrence of a value in Python lists.
languages = ["python", "java", "javascript", "python", "c++"]
python_index = languages.index("python")
print(python_index) # Output: 0
The count()
method returns the number of occurrences of a value in Python lists.
grades = [85, 90, 85, 78, 92, 85, 88]
count_85 = grades.count(85)
print(count_85) # Output: 3
The sort()
method sorts Python lists in ascending order by default.
unsorted_numbers = [64, 34, 25, 12, 22, 11, 90]
unsorted_numbers.sort()
print(unsorted_numbers) # Output: [11, 12, 22, 25, 34, 64, 90]
# Sort in descending order
unsorted_numbers.sort(reverse=True)
print(unsorted_numbers) # Output: [90, 64, 34, 25, 22, 12, 11]
The reverse()
method reverses the order of elements in Python lists.
original_list = [1, 2, 3, 4, 5]
original_list.reverse()
print(original_list) # Output: [5, 4, 3, 2, 1]
The clear()
method removes all elements from Python lists.
temp_list = [1, 2, 3, 4, 5]
temp_list.clear()
print(temp_list) # Output: []
Python list comprehensions provide a concise way to create Python lists based on existing lists or other iterables.
squares = [x**2 for x in range(1, 6)]
print(squares) # Output: [1, 4, 9, 16, 25]
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers) # Output: [2, 4, 6, 8, 10]
words = ["hello", "world", "python", "programming"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # Output: ['HELLO', 'WORLD', 'PYTHON', 'PROGRAMMING']
Python lists can contain other Python lists, creating multidimensional data structures.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2]) # Output: 6
# Accessing nested list elements
student_grades = [["Alice", [85, 90, 78]], ["Bob", [92, 88, 95]], ["Charlie", [76, 82, 89]]]
print(student_grades[0][1][1]) # Output: 90 (Alice's second grade)
Understanding when to use Python lists versus other data structures is important for efficient programming.
# Lists are mutable
mutable_list = [1, 2, 3]
mutable_list[0] = 10
print(mutable_list) # Output: [10, 2, 3]
# Tuples are immutable
immutable_tuple = (1, 2, 3)
# immutable_tuple[0] = 10 # This would raise an error
# Lists allow duplicates
list_with_duplicates = [1, 2, 2, 3, 3, 3]
print(list_with_duplicates) # Output: [1, 2, 2, 3, 3, 3]
# Sets remove duplicates
set_without_duplicates = set([1, 2, 2, 3, 3, 3])
print(set_without_duplicates) # Output: {1, 2, 3}
list1 = [1, 2, 3]
list2 = [4, 5, 6]
concatenated = list1 + list2
print(concatenated) # Output: [1, 2, 3, 4, 5, 6]
repeated_list = [0] * 5
print(repeated_list) # Output: [0, 0, 0, 0, 0]
fruits = ["apple", "banana", "orange"]
print("apple" in fruits) # Output: True
print("grape" not in fruits) # Output: True
my_list = [1, 2, 3, 4, 5]
print(len(my_list)) # Output: 5
Here’s a complete example demonstrating various Python list operations in a practical scenario:
# Student Management System using Python Lists
import random
# Initialize student data
students = []
subjects = ["Math", "Science", "English", "History", "Art"]
# Function to add a student
def add_student(name, grades):
student = {"name": name, "grades": grades}
students.append(student)
print(f"Student {name} added successfully!")
# Function to display all students
def display_students():
if not students:
print("No students found!")
return
print("\n--- Student List ---")
for i, student in enumerate(students, 1):
print(f"{i}. {student['name']}: {student['grades']}")
# Function to calculate average grade
def calculate_average(grades):
return sum(grades) / len(grades) if grades else 0
# Function to find top performer
def find_top_performer():
if not students:
print("No students to evaluate!")
return
top_student = max(students, key=lambda x: calculate_average(x['grades']))
avg_grade = calculate_average(top_student['grades'])
print(f"\nTop performer: {top_student['name']} with average grade: {avg_grade:.2f}")
# Function to sort students by average grade
def sort_students_by_grade():
if not students:
print("No students to sort!")
return
students.sort(key=lambda x: calculate_average(x['grades']), reverse=True)
print("\nStudents sorted by average grade (highest to lowest):")
for student in students:
avg = calculate_average(student['grades'])
print(f"{student['name']}: {avg:.2f}")
# Function to remove a student
def remove_student(name):
for i, student in enumerate(students):
if student['name'].lower() == name.lower():
removed_student = students.pop(i)
print(f"Student {removed_student['name']} removed successfully!")
return
print(f"Student {name} not found!")
# Function to update student grades
def update_grades(name, new_grades):
for student in students:
if student['name'].lower() == name.lower():
student['grades'] = new_grades
print(f"Grades updated for {name}!")
return
print(f"Student {name} not found!")
# Function to get subject statistics
def subject_statistics():
if not students:
print("No students to analyze!")
return
print("\n--- Subject Statistics ---")
for i, subject in enumerate(subjects):
grades = [student['grades'][i] for student in students if i < len(student['grades'])]
if grades:
avg_grade = sum(grades) / len(grades)
print(f"{subject}: Average = {avg_grade:.2f}, Highest = {max(grades)}, Lowest = {min(grades)}")
# Main program execution
if __name__ == "__main__":
# Adding sample students with random grades
sample_students = [
("Alice Johnson", [85, 92, 78, 88, 91]),
("Bob Smith", [76, 84, 90, 82, 87]),
("Charlie Brown", [95, 89, 93, 91, 88]),
("Diana Prince", [88, 90, 85, 94, 92]),
("Eve Wilson", [82, 87, 79, 85, 86])
]
# Add sample students
for name, grades in sample_students:
add_student(name, grades)
# Display all students
display_students()
# Find top performer
find_top_performer()
# Sort students by grade
sort_students_by_grade()
# Show subject statistics
subject_statistics()
# Demonstrate list operations
print("\n--- List Operations Demo ---")
# Extract all student names
student_names = [student['name'] for student in students]
print(f"Student names: {student_names}")
# Get all grades in a flat list
all_grades = []
for student in students:
all_grades.extend(student['grades'])
print(f"All grades: {all_grades}")
print(f"Total number of grades: {len(all_grades)}")
print(f"Overall average: {sum(all_grades) / len(all_grades):.2f}")
# Filter students with high performance (average > 85)
high_performers = [student for student in students
if calculate_average(student['grades']) > 85]
print(f"\nHigh performers (avg > 85): {[s['name'] for s in high_performers]}")
# Update a student's grades
update_grades("Alice Johnson", [90, 95, 85, 92, 94])
# Remove a student
remove_student("Eve Wilson")
# Display final student list
print("\n--- Final Student List ---")
display_students()
# Demonstrate advanced list operations
print("\n--- Advanced Operations ---")
# Create a nested list of all grades by subject
grades_by_subject = [[] for _ in range(len(subjects))]
for student in students:
for i, grade in enumerate(student['grades']):
if i < len(grades_by_subject):
grades_by_subject[i].append(grade)
print("Grades organized by subject:")
for i, subject in enumerate(subjects):
if i < len(grades_by_subject):
print(f"{subject}: {grades_by_subject[i]}")
# Find students who excel in Math (first subject)
math_grades = [student['grades'][0] for student in students]
math_average = sum(math_grades) / len(math_grades)
math_experts = [student['name'] for student in students
if student['grades'][0] > math_average]
print(f"\nMath experts (above average {math_average:.2f}): {math_experts}")
# Create a summary report
print("\n--- Summary Report ---")
print(f"Total students: {len(students)}")
print(f"Total subjects: {len(subjects)}")
print(f"Subjects: {', '.join(subjects)}")
# Count grades by range
grade_ranges = {"A (90-100)": 0, "B (80-89)": 0, "C (70-79)": 0, "D (60-69)": 0, "F (0-59)": 0}
for grade in all_grades:
if grade >= 90:
grade_ranges["A (90-100)"] += 1
elif grade >= 80:
grade_ranges["B (80-89)"] += 1
elif grade >= 70:
grade_ranges["C (70-79)"] += 1
elif grade >= 60:
grade_ranges["D (60-69)"] += 1
else:
grade_ranges["F (0-59)"] += 1
print("\nGrade distribution:")
for range_name, count in grade_ranges.items():
print(f"{range_name}: {count} grades")
Expected Output:
Student Alice Johnson added successfully!
Student Bob Smith added successfully!
Student Charlie Brown added successfully!
Student Diana Prince added successfully!
Student Eve Wilson added successfully!
--- Student List ---
1. Alice Johnson: [85, 92, 78, 88, 91]
2. Bob Smith: [76, 84, 90, 82, 87]
3. Charlie Brown: [95, 89, 93, 91, 88]
4. Diana Prince: [88, 90, 85, 94, 92]
5. Eve Wilson: [82, 87, 79, 85, 86]
Top performer: Charlie Brown with average grade: 91.20
Students sorted by average grade (highest to lowest):
Charlie Brown: 91.20
Diana Prince: 89.80
Alice Johnson: 86.80
Eve Wilson: 83.80
Bob Smith: 83.80
--- Subject Statistics ---
Math: Average = 85.20, Highest = 95, Lowest = 76
Science: Average = 88.40, Highest = 92, Lowest = 84
English: Average = 85.00, Highest = 93, Lowest = 78
History: Average = 88.00, Highest = 94, Lowest = 82
Art: Average = 88.80, Highest = 92, Lowest = 86
--- List Operations Demo ---
Student names: ['Charlie Brown', 'Diana Prince', 'Alice Johnson', 'Eve Wilson', 'Bob Smith']
All grades: [95, 89, 93, 91, 88, 88, 90, 85, 94, 92, 85, 92, 78, 88, 91, 82, 87, 79, 85, 86, 76, 84, 90, 82, 87]
Total number of grades: 25
Overall average: 87.04
High performers (avg > 85): ['Charlie Brown', 'Diana Prince', 'Alice Johnson']
Grades updated for Alice Johnson!
Student Eve Wilson removed successfully!
--- Final Student List ---
1. Charlie Brown: [95, 89, 93, 91, 88]
2. Diana Prince: [88, 90, 85, 94, 92]
3. Alice Johnson: [90, 95, 85, 92, 94]
4. Bob Smith: [76, 84, 90, 82, 87]
--- Advanced Operations ---
Grades organized by subject:
Math: [95, 88, 90, 76]
Science: [89, 90, 95, 84]
English: [93, 85, 85, 90]
History: [91, 94, 92, 82]
Art: [88, 92, 94, 87]
Math experts (above average 87.25): ['Charlie Brown', 'Alice Johnson']
--- Summary Report ---
Total students: 4
Total subjects: 5
Subjects: Math, Science, English, History, Art
Grade distribution:
A (90-100): 11 grades
B (80-89): 9 grades
C (70-79): 0 grades
D (60-69): 0 grades
F (0-59): 0 grades
This comprehensive example demonstrates the power and flexibility of Python lists in real-world applications. From basic operations like adding and removing elements to advanced techniques like list comprehensions and nested data structures, Python lists provide the foundation for effective data management and manipulation in Python programming.
The student management system showcases how Python lists can be used to store complex data, perform calculations, sort information, and create dynamic applications. Whether you’re building simple scripts or complex applications, mastering Python lists is essential for becoming proficient in Python programming.