Проблемы с кортежами внутри кортежей - PullRequest
0 голосов
/ 24 октября 2019

Для кортежа кортежей я хочу убедиться, что все внутренние кортежи имеют одинаковую длину.

Я пробовал сравнивать индексы, но это не работает.

p = ((1,1,1),(1,0,1,1),(1,1,1))

def lab(x):
    if type(x) != tuple:
        return False
    else:
        z = len(x[0])
        for y in x:
            if len(y) < 3 and len(y[1:]) != z:
                return False
            else:
                    while x[0][0] != 1:
                        return False
                    while x[len(x)-1][-1] != 1:
                        return False
        else:
            return True

print(lab(p))

По сути, вы можете видеть, что 2-й кортеж имеет 4 элемента, а не 3, и я просто хотел, чтобы функция возвращала false, а не True, поскольку 2-й кортеж имеет размер, отличный от 1-го, и он должен возвращать false с тех пор, как это произошло

Я пытаюсь построить лабиринт и его квадрат и, как и все квадраты, все части имеют одинаковый размер, поэтому мне нужно, чтобы все кортежи имели одинаковую длину, первая цифра 1-го кортежа должна быть 1 ипоследняя цифра последнего кортежа тоже должна быть 1, чтобы построить этот лабиринт.

Ps: мне просто нужна часть длины, об остальном позаботятся, но если у вас есть какие-либо идеи о том, как улучшить это, я все слышу.

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Вы можете проверить это с помощью одной строки:

def lab(tups):
  return len(set([len(tup) for tup in tups])) == 1

print(lab(((1,1,1),(1,0,1,1),(1,1,1)))) # False
print(lab(((1,1,1),(1,1,1),(1,1,1)))) # True

... Конечно, вы, вероятно, захотите добавить проверки ошибок для пустых кортежей и т. Д.

1 голос
/ 24 октября 2019

Если вы хотите проверить, что все внутренние кортежи / списки имеют одинаковую длину:

>>> f = lambda l: all([len(t) == len(l[0]) for t in l])
>>> f([(1,1,1),(1,1,1),(1,1,1)])
True
>>> f([(1,1,1),(1,0,1,1),(1,1,1)])
False
>>> f([])
True
...