繁体   English   中英

检查列表中是否存在字符

[英]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”未定义”。

这是因为未定义,假设这是您的完整代码。 bcd

您需要事先使用一些字符串对象定义这些变量(1.),或者将字母本身写为字符串文字(2.):

  1. a, b, c, d = "my_string1", "my_string2", "my_string3", "my_string4"
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM