Question: ```
lista = [["a", "b", "c"], ["d", "e", "f"]]

def check(temp_plan):
    if all(isinstance(elements, str) for elements  in temp_plan):
        return True
    else:
        return False

print(check(lista))

```

I know the code above returns false since the elements in the list are lists.

Answer: 
If it's *consistently* a two-dimensional list, then you can use a second `for` in the comprehension inside `all()`:

```
def check(temp_plan):
    return all(
        isinstance(e, str)
        for elements in temp_plan
        for e in elements
    )

print(check(lista))
# True
# since `isinstance(e, str)` is true for each sub-element

```

(note I replace `if all(...): True; else False` with just `all()`, since `all()` returns a `True` or `False` answer anyway).

Your condition `isinstance(e, str)` can be whatever you want - your question title says you want to check if they're integers, and if that's the case you can change the condition to `e.isdigit()`, which returns `True` if the string represents an integer and `False` otherwise.
You can use nested [list comprehensions](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions) with `isinstance()` and `any()`:

```
>>> some_list = [["a", "b", "c"], ["d", 5, "f"]]
>>> [any([isinstance(y, int) for y in x]) for x in some_list]
[False, True]

```

If you want to be more stringent, you can use `all()`:

```
>>> another_list = [["a", "b", "c"], [1, 2, 3]]
>>> [all([isinstance(x, int) for x in y]) for y in another_list]
[False, True]

```

If you want to test all sublists, use `all()` again:

```
>>> all([all([isinstance(x, int) for x in y]) for y in another_list])
False

```

To turn that into a function:

```
def check(l):
  return all([all([isinstance(x, int) for x in y]) for y in l])

```