[英]Check whether character exists in list
我正在尝试编写一个递归函数,以检查列表中是否存在某个字符(列表可以包含子列表)。
到目前为止,我已经提出了这个建议,但是它似乎没有用。 我究竟做错了什么?
def exists(str, seq):
if not seq:
return 0
elif isinstance(seq[0], list):
return exists(seq[0]) + exists(seq[1:])
elif str == seq[0]:
return True
else:
return exists(seq[1:])
如果我尝试
print(exists("c", [a,[b,c],d]))
我得到的名称“ a”未定义
def exists(str, seq):
您不应使用内置类型str
作为变量的名称。
return 0
对于二进制函数,应返回False
而不是0。
return exists(seq[0]) + exists(seq[1:])
exist
调用必须有两个参数,而不是一个。 并且您应该使用or
,而不是+
。
return exists(seq[1:])
exist
调用必须有两个参数,而不是一个。
print(exists("c", [a,[b,c],d]))
[a,[b,c],d]
意思是“包含名为a,b,c和d的变量的嵌套列表”。 如果您没有使用这些名称的变量,则将导致NameError崩溃。 也许您打算使用字符串文字。
def exists(s, seq):
if not seq:
return False
elif isinstance(seq[0], list):
return exists(s, seq[0]) or exists(s, seq[1:])
elif s == seq[0]:
return True
else:
return exists(s, seq[1:])
print(exists("c", ["a",["b","c"],"d"]))
“我得到的名称“ a”未定义”。
这是因为未定义,假设这是您的完整代码。 b
, c
和d
。
您需要事先使用一些字符串对象定义这些变量(1.),或者将字母本身写为字符串文字(2.):
a, b, c, d = "my_string1", "my_string2", "my_string3", "my_string4"
print(exists('c', ['a', ['b', 'c'], 'd']))
除此之外,您将函数定义为def exists(str, seq):
但是将其调用为exists(seq[0])
,这意味着您缺少参数。
然后,您尝试添加可能有用的布尔值,但是我不确定这是否是您想要实现的值: return exists(seq[0]) + exists(seq[1:])
。 如果转换为布尔值,则2
也将为True
。 但是,如果其中一个语句为0
也将为True
。 要检查两者是否均为True
,应将值相乘。 另外,请尝试对每种返回情况使用相同的返回类型。
您还使用了seq的第一个字符(或项目),而您实际上想使用字符串str
的第一个字符。 小心! str
是类型类,请勿将其用作变量名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.