Lists
Python - A Quick Start for existing Programers
4 min read
Published Sep 16 2025, updated Aug 17 2026
Guide Sections
Guide Comments
A list in Python is a built-in, ordered, mutable (changeable), and iterable collection of elements.
- Ordered: Items have a defined order and can be accessed by index (
list[0]). - Mutable: You can add, remove, or change items after creation.
- Heterogeneous: Can store different data types in the same list.
- Indexed: Zero-based indexing (
list[0]is the first element). []: Lists are defined by using[]square brackets.
Examples:
# List of stringsfruits = ["apple", "banana", "cherry"]# List of integersnums = [3,4,5,6,10,20]# List of mixed data typesdata = [4, "Frog", 8.2]Python lists are indexed collections, however you can also use negative indexing:
- Zero-based indexing → the first element is at index
0, the second at1, and so on. - Negative indexing → counts from the end:
-1is the last element,-2the second-to-last, etc.
Examples:
nums = [10, 20, 30, 40, 50]# Zero-based indexingprint("First element:", nums[0]) # 10print("Second element:", nums[1]) # 20# Negative indexingprint("Last element:", nums[-1]) # 50print("Second to last:", nums[-2]) # 40# Slicing works with bothprint("First three:", nums[:3]) # [10, 20, 30]print("Last three:", nums[-3:]) # [30, 40, 50]Built-in functions used with lists
Python has a number of built in functions that can be used with lists:
len(list)→ number of elementsmin(list),max(list)→ smallest/largest elementsum(list)→ sum of elements (if numeric)sorted(list)→ returns a new sorted list (does not modify original)enumerate(list)→ get index and value pairsany(list),all(list)→ logical checks
Examples:
nums = [3, 1, 4, 1, 5, 9]# len(list) → number of elementsprint("Length:", len(nums)) # 6# min(list), max(list) → smallest/largest elementprint("Min:", min(nums)) # 1print("Max:", max(nums)) # 9# sum(list) → sum of elementsprint("Sum:", sum(nums)) # 23# sorted(list) → returns a new sorted list (original unchanged)print("Sorted copy:", sorted(nums)) # [1, 1, 3, 4, 5, 9]print("Original list still:", nums)# enumerate(list) → index + value pairsfor i, val in enumerate(nums): print(f"Enumerate: index={i}, value={val}")# any(list), all(list) → logical checksprint("Any > 8?", any(n > 8 for n in nums)) # True (9 is > 8)print("All > 0?", all(n > 0 for n in nums)) # True (all positive)Lists own functions
Lists also have their own functions that can be called by using the . notation between the variable name and the function name:
Function | Description |
| Add an item |
| Add all elements from another iterable (like a list/tuple) to the end. |
| Insert item |
| Remove the first occurrence of |
| Remove and return the item at index |
| Remove all items (makes the list empty). |
| Return the first index of value |
| Return the number of occurrences of |
| Sort the list in ascending order (in-place). Optional |
| Reverse the list in place. |
| Return a shallow copy of the list. |
Examples:
nums = [3, 1, 4, 1, 5]print("Original:", nums)# Original: [3, 1, 4, 1, 5]# append(x) → add item to endnums.append(9)print("append(9):", nums)# append(9): [3, 1, 4, 1, 5, 9]# extend(iterable) → add elements from another iterablenums.extend([2, 6])print("extend([2, 6]):", nums)# extend([2, 6]): [3, 1, 4, 1, 5, 9, 2, 6]# insert(i, x) → insert at positionnums.insert(2, 7) print("insert(2, 7):", nums)# insert(2, 7): [3, 1, 7, 4, 1, 5, 9, 2, 6]# remove(x) → remove first occurrencenums.remove(1)print("remove(1):", nums)# remove(1): [3, 7, 4, 1, 5, 9, 2, 6]# pop([i]) → remove and return item at index (default last)last = nums.pop()print("pop() removed:", last, "| list:", nums)# pop() removed: 6 | list: [3, 7, 4, 1, 5, 9, 2]third = nums.pop(2)print("pop(2) removed:", third, "| list:", nums)# pop(2) removed: 4 | list: [3, 7, 1, 5, 9, 2]# clear() → remove all itemscopy_for_clear = nums.copy()copy_for_clear.clear()print("clear():", copy_for_clear)# clear(): []# index(x[, start[, end]]) → find first occurrence indexprint("index of 5:", nums.index(5))# index of 5: 3# count(x) → count occurrencesprint("count of 1:", nums.count(1))# count of 1: 1# sort(key=None, reverse=False) → in-place sortnums.sort()print("sort():", nums)# sort(): [1, 2, 3, 5, 7, 9]nums.sort(reverse=True)print("sort(reverse=True):", nums)# sort(reverse=True): [9, 7, 5, 3, 2, 1]# reverse() → reverse in-placenums.reverse()print("reverse():", nums)# reverse(): [1, 2, 3, 5, 7, 9]# copy() → shallow copynums_copy = nums.copy()print("copy():", nums_copy)# copy(): [1, 2, 3, 5, 7, 9]Casting to a list in
You can call list(x) to create a list from any iterable (something you can loop over).
Works with:
- Strings → breaks into characters
- Tuples → converts into list of elements
- Sets → unordered elements become a list
- Dictionaries → by default, only keys are taken
- Range objects → numbers expanded into a list
- Other iterables (generators, iterators, files, custom classes that implement
__iter__)
Does not work with non-iterables (like int, float, None) → raises TypeError.
Examples:
# String → list of charactersprint(list("hello")) # ['h', 'e', 'l', 'l', 'o']# Tuple → listprint(list((1, 2, 3))) # [1, 2, 3]# Set → list (unordered)print(list({1, 2, 3})) # [1, 2, 3] (order may vary)# Dictionary → keys onlyprint(list({"a": 1, "b": 2})) # ['a', 'b']# Range → expanded list of numbersprint(list(range(5))) # [0, 1, 2, 3, 4]# Generator → consumed into listgen = (x**2 for x in range(5))print(list(gen)) # [0, 1, 4, 9, 16]List comparisons
In Python, lists are compared lexicographically (like words in a dictionary):
- Compare the first elements of each list.
- If they differ, that decides the result.
- If they’re equal, move to the next pair of elements.
- If all compared elements are equal but one list is shorter, the shorter one is considered less.
Rules for List Comparisons
- Uses standard comparison operators:
<,<=,>,>=,==,!=. - Works only if the elements themselves are comparable (
<,>must make sense for the element types). - If element types are not comparable (e.g.,
[1] < ["a"]), it raises aTypeError. - Think of list comparison like comparing words:
"cat" < "dog"because"c" < "d". - For lists,
[1, 2, 3] < [1, 2, 4]because3 < 4.
Examples:
# Equal listsprint([1, 2, 3] == [1, 2, 3]) # Trueprint([1, 2, 3] == [1, 2, 4]) # False# Less/greater based on first differing elementprint([1, 2, 3] < [1, 2, 4]) # True (3 < 4 at index 2)print([1, 3] > [1, 2, 99]) # True (3 > 2 at index 1)# Shorter list is smaller if all compared elements are equalprint([1, 2] < [1, 2, 0]) # Trueprint([1, 2, 3] > [1, 2]) # True# Mixed types (error)try: print([1] < ["a"])except TypeError as e: print("Error:", e)List Comprehension
- A concise way to create lists.
- Equivalent to a
forloop but shorter and more readable.
Syntax:
[expression for item in iterable if condition]Benefits:
- Cleaner & faster than loops.
- Can include conditions (
if). - Can nest comprehensions (though readability can suffer).
Examples:
nums = [1, 2, 3, 4, 5]# Square each numbersquares = [x**2 for x in nums]print("Squares:", squares)# Even numbers onlyevens = [x for x in nums if x % 2 == 0]print("Evens:", evens)# Create a list of tuples (number, square)pairs = [(x, x**2) for x in nums]print("Pairs:", pairs)# ----------------------------------------# Nested comprehensions# ----------------------------------------matrix = [[1, 2, 3], [4, 5, 6]]# Flatten a 2D listflattened = [num for row in matrix for num in row]print("Flattened:", flattened)# Transpose matrixtranspose = [[row[i] for row in matrix] for i in range(3)]print("Transpose:", transpose)# ----------------------------------------# Using functions# ----------------------------------------def square(x): return x * x# Apply functionsquared = [square(x) for x in nums]print("Squared with function:", squared)# ----------------------------------------# Conditional expressions inside comprehension# ----------------------------------------labels = ["even" if x % 2 == 0 else "odd" for x in nums]print("Even/Odd labels:", labels)Full demonstration of lists
# --- Creating a list ---nums = [3, 1, 4, 1, 5]print("Original:", nums)# --- Indexing & Slicing ---print("First element:", nums[0]) # 3print("Last element:", nums[-1]) # 5print("First 3:", nums[:3]) # [3, 1, 4]print("Last 2:", nums[-2:]) # [1, 5]# --- Built-in functions ---print("Length:", len(nums)) # 5print("Min:", min(nums)) # 1print("Max:", max(nums)) # 5print("Sum:", sum(nums)) # 14print("Sorted copy:", sorted(nums)) # [1, 1, 3, 4, 5]print("Original unchanged:", nums)print("Enumerate:")for i, val in enumerate(nums): print(f" index={i}, value={val}")print("Any > 4?", any(n > 4 for n in nums)) # Trueprint("All > 0?", all(n > 0 for n in nums)) # True# --- List Methods ---nums.append(9)print("append(9):", nums)nums.extend([2, 6])print("extend([2, 6]):", nums)nums.insert(2, 7)print("insert(2, 7):", nums)nums.remove(1) # removes first 1print("remove(1):", nums)last = nums.pop()print("pop() removed:", last, "| list:", nums)second = nums.pop(2)print("pop(2) removed:", second, "| list:", nums)copy_for_clear = nums.copy()copy_for_clear.clear()print("clear():", copy_for_clear)print("index of 5:", nums.index(5))print("count of 1:", nums.count(1))nums.sort()print("sort():", nums)nums.sort(reverse=True)print("sort(reverse=True):", nums)nums.reverse()print("reverse():", nums)nums_copy = nums.copy()print("copy():", nums_copy)# --- Casting to list ---print("list('hello'):", list("hello"))print("list((1,2,3)):", list((1, 2, 3)))print("list({1,2,3}):", list({1, 2, 3})) # order not guaranteedprint("list({'a':1,'b':2}):", list({"a":1,"b":2})) # keys onlyprint("list(range(5)):", list(range(5)))gen = (x**2 for x in range(5))print("list(generator):", list(gen))# --- List Comparisons ---print("[1,2,3] == [1,2,3]:", [1,2,3] == [1,2,3]) # Trueprint("[1,2,3] < [1,2,4]:", [1,2,3] < [1,2,4]) # True (3 < 4)print("[1,3] > [1,2,99]:", [1,3] > [1,2,99]) # True (3 > 2)print("[1,2] < [1,2,0]:", [1,2] < [1,2,0]) # True (shorter)print("[1,2,3] > [1,2]:", [1,2,3] > [1,2]) # True (longer)try: print([1] < ["a"]) # invalid comparisonexcept TypeError as e: print("Error on mixed types:", e)