> For the complete documentation index, see [llms.txt](https://lei-d.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lei-d.gitbook.io/leetcode/python-tips/for-else.md).

# for ... else ...

For loops also have an`else`clause which most of us are unfamiliar with. The`else`clause executes when the loop completes normally. This means that the loop did not encounter any`break`.

The common construct is to run a loop and search for an item. If the item is found, we break the loop using`break`. There are two scenarios in which the loop may end. The first one is when the item is found and`break`is encountered. The second scenario is that the loop ends. Now we may want to know which one of these is the reason for a loops completion. One method is to set a flag and then check it once the loop ends. Another is to use the`else`clause.

This is the basic structure of a`for/else`loop:

```python
for item in container:
    if search_something(item):
        # Found it!
        process(item)
        break
else:
    # Didn't find anything..
    not_found_in_container()
```

Consider this simple example which I took from the official documentation:

```python
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n/x)
            break
```

It finds factors for numbers between 2 to 10. Now for the fun part. We can add an additional `else`block which catches the numbers which are prime and tells us so:

```python
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print( n, 'equals', x, '*', n/x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')
```

Reference: <http://book.pythontips.com/en/latest/for_-_else.html>
