使用递归python在列表中查找项

使用递归python在列表中查找项,python,Python,使用递归编写一个函数,该函数包含一个listseq和一个值项。如果项是seq的元素,则函数应生成True,否则生成False。序列中的项可以是任何类型的数据,如浮点、列表/数组、元组等 到目前为止,我有: def contains (seq, item): if len(seq) == 0: return True elif len(seq) == 1 and (seq[0] == item): return True else:

使用递归编写一个函数,该函数包含一个listseq和一个值项。如果seq的元素,则函数应生成True,否则生成False。序列中的项可以是任何类型的数据,如浮点、列表/数组、元组等

到目前为止,我有:

def contains (seq, item):
    if len(seq) == 0:
        return True
    elif len(seq) == 1 and (seq[0] == item):
        return True 
    else:
        if (seq[0] == item):
            return contains(seq [1:], item)
        else:
            return False


print (contains([10, 12, 13, 14 ], 10))

你的逻辑基本上是落后的,但不是完全落后的

首先,对于空列表,返回
True
。这是错误的,空列表不包含任何内容,因此它不包含

接下来,对于大小为1的列表,其唯一元素是
,您将返回
True
。没错。可能不是必要的测试,但正确

接下来,如果第一个元素是
,则检查列表的其余部分。这是错误的-一个包含
的列表加上一些包含
的其他内容

最后,对于任何其他内容(第一个元素不是
item
)的多元素列表,返回
False
。这是错误的——一个包含一堆东西的列表,其中一个东西不是
item
,可能仍然包含
item
。在这里,您需要检查列表的其余部分


如果您将正确的逻辑转换为代码的方式与将错误的逻辑转换为代码的方式相同,那么代码将正常工作。

但是您有问题吗?请稍候,如果
seq[0]==item
没有必要进行递归:您只需立即返回True。对于练习,我需要在seq中进行递归
返回item
-在这种情况下使用递归是[审查了关于此类tak和教师给出这些tak的10件真正的事情]错误的做法。@PatrickArtner是的,我不明白为什么这么多老师这么做。有一些简单的问题需要递归。他们没有给出这些问题中的一个,而是提出了一个需要循环的问题,并要求您使用递归来实现。在后面的练习中,为了向您展示递归和循环在理解它们之后是如何对偶的,这是有意义的,但作为第一次教授递归的第一周作业?这就像他们只是想误导他们的学生…谢谢,但没有必要讽刺我只是个初学者;第一week@harryhairyhairhare没有讽刺。对发生了什么和应该发生什么有一个解释。我的回答中没有讽刺。我告诉过你四个测试中的每一个都是什么意思,以及为什么它们都是错误的。如果你宁愿我撒谎,告诉你你做的每件事都是对的,你就没有办法解决你的问题。