Не могу дать пустой список Python, функция выбрасывает "TypeError" - PullRequest
0 голосов
/ 27 сентября 2019

Предполагается, что функция распечатывает все битовые векторы, которые имеют длину n бит и содержат k 1.Проблема в том, что я не могу дать пустой список в качестве входных данных для функции.

Я работаю в Ubuntu и использую Python 3.6.Я также пытался использовать непустой список, как [1], но это выдает ту же ошибку.При попытке найти длину пустого списка вне функции она работает как следует: len ([]) возвращает 0.

Вот мой код:

def bitvector(n, k, vektor):
    if len(vektor) == n:
        if vektor.count(1) == k:
            print(vektor)
    bitvector(n, k, vektor.append(0))
    bitvector(n, k, vektor.append(1))


bitvector(1, 2 , [])

РЕДАКТИРОВАТЬ:

def bitvector(n, k, vektor):
    if len(vektor) > n:
        return
    if len(vektor) == n:
        print("test")
        if vektor.count(1) == k:
            print(vektor)
            return
    bitvector(n, k, vektor.append(1))
    bitvector(n, k, vektor.append(0))


bitvector(1, 2 , [])

Предполагается получить длину списка, но вместо этого выдается следующая ошибка:

TypeError: объект типа 'NoneType' не имеет len ()

1 Ответ

0 голосов
/ 27 сентября 2019

Поскольку я не ограничивался использованием определенного типа, я решил использовать строку вместо списка.

def bitvector(n, k, vektor):
    vektor_list = list(vektor)
    if len(vektor) > n:
        return
    if len(vektor) == n:
        if vektor_list.count("1") == k:
            print(vektor)
            return
    bitvector(n, k, vektor + "0")
    bitvector(n, k, vektor + "1")

РЕДАКТИРОВАТЬ, оптимизировал мой код:

def bitvector(n, k, vektor):
vektor_list = list(vektor)
if vektor_list.count("1") > k:
    return
if len(vektor) == n:
    if vektor_list.count("1") == k:
        print(vektor)
        return
    else:
        return
bitvector(n, k, vektor + "0")
bitvector(n, k, vektor + "1")
...