max()
The largest item of an iterable — or of several arguments — with an optional key function.
Common call
max(scores)
Returns
the item itself, not its index
Replaces
strings compare lexicographically: max(['10', '9']) is '9'
Watch out
empty iterable raises ValueError — pass default= to survive it
max(iterableiterable — The items to compare. Alternatively pass two or more positional arguments.type: iterable · required, *, keykey — One-argument function computing the comparison key, e.g. key=len.type: callable · default: None=None, defaultdefault — Returned when the iterable is empty. Without it, empty raises ValueError.type: Any · default: (none)=...)
→ Any
Demo
Live evaluation
Try:
Inputs
itemslistcomma-separated items
Output
['banana', 'apple', 'cherry'].max()
'cherry'
The demo’s comma-separated items are strings, so comparison is lexicographic — that is why ’9’ beats ’10’. Pass key=int in real code for numeric strings. An empty iterable raises exactly Python’s error.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| iterable | iterable | yes | The items to compare. Alternatively pass two or more positional arguments. |
| key | callable | no (None) | One-argument function computing the comparison key, e.g. key=len. |
| default | Any | no ((none)) | Returned when the iterable is empty. Without it, empty raises ValueError. |
Return value
Any — The largest item. Empty iterable raises ValueError unless default is given. Also callable as max(a, b, ...).
Common patterns
Largest by a computed key
key gives you argmax behavior — the ITEM with the biggest key.
longest = max(words, key=len) oldest = max(users, key=lambda u: u.age)
Safe max of possibly-empty data
default turns the empty-sequence error into a value.
best = max(scores, default=0)
Clamping a value
The two-argument form pairs with min for range clamps.
clamped = max(lo, min(x, hi))
Examples
1. Max of an iterable
max([3, 1, 4, 1, 5])
Returns
52. Strings — lexicographic
max(["10", "9", "2"])
Returns
'9'3. Two-argument form
max(3, 7)
Returns
74. Empty with default
max([], default=0)
Returns
0Pitfalls
1. Empty iterable raises
Aggregating possibly-empty data needs the default keyword.
Raises
max([])
ValueError: max() arg is an empty sequence
Fix
max([], default=0)
0
2. Digit strings compare as text
Same trap as sorted — character order, not numeric order.
Surprising
max(["10", "9"])
'9'
Fix
max(["10", "9"], key=int)
'10'
3. max of a dict gives the largest KEY
Iterating a dict yields keys — use key= or .items() for value-based max.
Keys compared
max({"a": 3, "b": 1})
'b'
Largest by value
max(d, key=d.get)
'a'
When to use
Use it
- Largest item, or item with the largest key (argmax)
- Pairwise comparisons via the multi-argument form
- Clamping combined with min
Reach for something else
- Top-k items → heapq.nlargest
- Max under a condition → max(filter(...), default=...)
- Running maximum in a loop → track it yourself (one pass)
Notes
Complexity
O(n) — single pass
Return
an item from the input (not a copy)
CPython impl
Python/bltinmodule.c :: builtin_max
Memory
No allocation
Thread-safe
Yes for the scan; the source should not mutate concurrently
FAQ
Combine with index, or take the argmax over enumerate.
i = lst.index(max(lst)) # or, one pass: i = max(range(len(lst)), key=lst.__getitem__)
History
3.4
The default keyword argument added.
2.5
The key keyword argument added.