python - 不能给 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()
解决方案
由于我不限于使用某种类型,因此我选择使用字符串而不是列表。
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")
推荐阅读
- django - 在 Django 数据库中保存表示图像的 Base64 字符串
- typescript - 如何在 typescript 中声明一个类,就像使用“class”关键字一样?
- c++ - 为什么 round() 让我的表达给出错误的答案?
- reactjs - 使用 react-table-6 从 json 递归创建嵌套表
- keycloak - 使用 keycloak OIDC [SSL: CERTIFICATE_VERIFY_FAILED] 打开 edx
- css - 用 sass 更改 Bootstrap 5 颜色,但指定互补色
- php - 是否可以在使用 PHP 更新 cookie 后获得新值,而无需刷新屏幕?
- iframe - 跟踪 iframe 来源
- c# - LiteDb.Engine.PageBuffer 内存泄漏
- powershell - 使用 Powershell 解析 html 标签链接