首页 > 解决方案 > 不能给 Python 函数一个空列表抛出“TypeError”

问题描述

该函数应该打印出所有 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()

标签: pythonlistpython-3.6nonetypeempty-list

解决方案


由于我不限于使用某种类型,因此我选择使用字符串而不是列表。

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")

推荐阅读