Утвердить 2-й список в питоне - PullRequest
0 голосов
/ 04 декабря 2018

В python я пытаюсь проверить, является ли данный список двумерным списком.Я должен использовать утверждение assert, но не знаю, как его создать.

Пока у меня есть

assert type(x) == list

Я знаю, что это неверно, и проверяет 1-д список.Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я сделал это ...

l=[[]] assert type(l) == list and type(l[0]) == list

но я получаю indexError для одномерного случая, поэтому я использовал это ...

l=[]
try:
    assert type(l) == list and type(l[0]) == list
except IndexError:
        assert False

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AssertionError

Может быть, есть лучший способ, но он не очевиден для меня.

Лучшим (но затяжным) может быть ...

 assert type(l) == list and len({ type(el) for el in l }) == 1 and { type(el) for el in l }.pop() == list
0 голосов
/ 04 декабря 2018

, чтобы проверить, является ли x списком, который вы уже сделали

assert type(x) == list

, чтобы проверить, является ли x списком, а элементы x являются списком -

assert type(x)==list
assert reduce(lambda a,b : type (b) == list and a, x, True)

, чтобы проверить, является ли x списком, и элементы x являются списком, и каждый элемент имеет одинаковую длину -

assert type(x)==list
assert reduce(lambda a, b: type (b) == list and a, x, True)
l = len(x[0])
assert reduce(lambda a, b: len(b) == l and a, x, True)

Вместо reduce вы можете использовать all, что делает его более читабельным.

, чтобы проверить, является ли x списком, и элементы x являются списком, и каждый элемент имеет одинаковую длину -

assert type(x)==list
assert all([type(i) == list for i in x])
l = len(x[0])
assert all([len(i) == l for i in x])
...