# what is " if not self.list_stack: " mean?

what is " if not self.list_stack: " mean?

why it can check if the stack is empty or not?

Hey,

Thank you for your question!

Let me answer it by walking you through the following example. In a new cell in the notebook define an empty list as follows:

```
list_stack = []
```

Printing out the list simply returns an empty array. Now, however, try to convert the output in a Boolean format as follows:

```
bool(list_stack)
```

Executing this line should output `False`

. Therefore, an empty list converted into Boolean outputs `False`

.

Now, add an element inside the list, for example as follows:

```
list_stack = [2]
```

Convert again the list into a Boolean and, this time, the output should be `True`

. Therefore, a non-empty list returns `True`

.

Let's now consider Giles' code. The first line of the `is_empty()`

method reads

```
if not self.list_stack:
```

Since the `if`

-statement can only check Boolean values (whether a condition is `True`

or `False`

), `self.list_stack`

will be a Boolean expression. For an empty list, `self.list_stack`

would return `False`

. The `not`

command in front would turn `False`

into `True`

. Therefore, for an empty list, the expression

```
if not self.list_stack:
```

would turn into

```
if not False:
```

which, in turn, becomes

```
if True:
```

Therefore, we enter the `if`

-statement and return `True`

. This is great, as the `is_empty()`

method returns `True`

and we indeed started with an empty list.

Consider now a non-empty list. Then

```
if not self.list_stack:
```

becomes

```
if not True:
```

which is equivalent to

```
if False:
```

Therefore, we don't enter the `if`

-statement and jump straight to the `else`

-statement. The `is_empty()`

method returns `False`

. This, again, is indeed what we want, since we started with a non-empty list.

Hope the answer helps!

Kind regards,

365 Hristina