Python — Lists

A list stores a series of items in order. Items are accessed by index starting at 0. Negative indices count from the end (-1 = last item).

Defining and Accessing

bikes = ['trek', 'redline', 'giant']
 
first = bikes[0]     # 'trek'
last  = bikes[-1]    # 'giant'

Modifying

bikes[0] = 'cannondale'

Adding Items

bikes.append('specialized')      # add to end
bikes.insert(0, 'pinarello')     # insert at index 0

Removing Items

del bikes[-1]              # delete by position (permanent)
bikes.remove('redline')    # delete first match by value
popped = bikes.pop()       # remove + return last item
first  = bikes.pop(0)      # remove + return item at index 0

remove() vs del vs pop()

remove('x') finds first occurrence by value. del bikes[i] removes by position. pop() removes AND returns — use it when you need the value you’re removing.

Length

num_bikes = len(bikes)

Sorting

bikes.sort()                   # permanent alphabetical sort
bikes.sort(reverse=True)       # permanent reverse sort
print(sorted(bikes))           # temporary sort — original unchanged
bikes.reverse()                # reverse current order permanently

Looping

for bike in bikes:
    print(bike)

range() — Numerical Lists

range() generates a sequence. Starts at 0 by default; stops one before the end value.

for n in range(5):            # 0, 1, 2, 3, 4
    print(n)
 
for n in range(1, 6):         # 1, 2, 3, 4, 5
    print(n)
 
numbers = list(range(1, 1_000_001))   # list from 1 to 1 million

Simple Statistics

ages    = [93, 99, 66, 17, 85, 1, 35, 82, 2, 77]
youngest = min(ages)
oldest   = max(ages)
total    = sum(ages)

Slicing

A slice returns a copy of a portion of the list.

finishers    = ['kai', 'abe', 'ada', 'gus', 'zoe']
first_three  = finishers[:3]    # ['kai', 'abe', 'ada']
middle_three = finishers[1:4]   # ['abe', 'ada', 'gus']
last_three   = finishers[-3:]   # ['ada', 'gus', 'zoe']

Copying a List

Always copy with [:]. A direct assignment (copy = original) makes both variables point to the same list.

copy_of_bikes = bikes[:]    # independent copy

List Comprehensions

A compact way to build a list from a loop expression.

# Loop approach
squares = []
for x in range(1, 11):
    squares.append(x**2)
 
# Comprehension — same result, one line
squares = [x**2 for x in range(1, 11)]
 
# Convert names to uppercase
upper_names = [name.upper() for name in names]

Tuples

A tuple is like a list but immutable — items cannot be changed after creation. Use parentheses.

dimensions = (1920, 1080)
print(dimensions[0])       # 1920
 
dimensions = (1200, 900)   # overwriting the whole tuple variable is OK
# dimensions[0] = 999      # TypeError — can't change individual items

Style Conventions (PEP 8)

  • 4 spaces per indent level (never tabs)
  • Lines ≤ 79 characters
  • Single blank lines to group related blocks visually

Cross-References

graph TD
    A[List] --> B["Access: bikes[0], bikes[-1]"]
    A --> C["Modify: append / insert / del / remove / pop"]
    A --> D["Sort: .sort / sorted / .reverse"]
    A --> E["Slice: list[start:end]"]
    A --> F["Copy: list[:]"]
    A --> G["Comprehension: [expr for x in iter]"]
    H["range()"] --> I[Numerical lists + for loops]
    J[Tuple] --> K[Immutable: parentheses not brackets]