所以我有这个问题,我必须做家庭作业。
接下来,写下ind(e,L)。这是它的描述:
写入ind(e,L),其接收序列L和元素e。 L可能是一个字符串,或者更一般地说,是一个列表。你的函数ind应该返回在L中首次找到e的索引。从列表开始,计数从0开始。如果e不是L的元素,则ind(e,L)应该返回等于len(L)的整数。以下是一些例子:
ind(42, [ 55, 77, 42, 12, 42, 100 ]) returns 2
ind(42, range(0,100)) returns 42
ind('hi', [ 'hello', 42, True ]) returns 3
ind('hi', [ 'well', 'hi', 'there' ]) returns 1
ind('i', 'team') returns 4
ind(' ', 'outer exploration') returns 5
在最后一个例子中,ind的第一个输入是一个单个空格字符的字符串,而不是空字符串。
提示:正如您可以检查元素是否在
序列中一样如果是L: 您还可以检查元素是否不在
序列中如果e不在L中: 后一种语法对ind函数很有用!与dot一样,ind可能与类示例中的mylen最相似。
这里是我为这个问题编写的许多代码之一。
def ind( e, L):
num = 0
if e not in L and num == 0:
return len(L)
else:
if e == L[0]:
num += 1 + ind( e, L[1:] )
return num
else:
return ind( e, L[1:] )
所以问题是每次e都不在列表中。它占用列表其余部分的长度并将其添加到num。我该如何解决这个问题?
答案 0 :(得分:1)
当按顺序处理指标时,Python有一个很好的内置命名enumerate
,它有助于以简洁的方式跟踪索引。
返回枚举对象。
sequence
必须是序列,迭代器或支持迭代的其他对象。next()
返回的迭代器的enumerate()
方法返回一个包含计数的元组(从start开始,默认为0)和迭代序列获得的值
样品:
seq = ['hello', 42, True]
for index, obj in enumerate(seq):
print index, obj
输出:
0 hello
1 42
2 True
我们可以使用它来显着简化处理。由于我们可以迭代L
并检索当前元素的索引和值,因此我们现在必须与请求的值进行比较。当找到值时,我们可以简单地返回它并跳过搜索序列的其余部分
def ind(e, L):
for index, value in enumerate(L):
if value == e:
return index
现在缺少的是没有找到值的情况,但添加对它的支持非常简单:
def ind(e, L):
for index, value in enumerate(L):
if value == e:
return index
return len(L) # this will be executed only if any value wasn't found earlier
它通过所有测试用例:
assert ind(42, [ 55, 77, 42, 12, 42, 100 ]) == 2
assert ind(42, range(0,100)) == 42
assert ind('hi', [ 'hello', 42, True ]) == 3
assert ind('hi', [ 'well', 'hi', 'there' ]) == 1
assert ind('i', 'team') == 4
assert ind(' ', 'outer exploration') == 5
奖励,使用Python提供的所有技巧:
def ind(e, L):
return next((idx for idx, obj in enumerate(L) if obj == e), len(L))
在搞清楚这里发生的事情时玩得开心:)
答案 1 :(得分:0)
在这里(!)曾经(!)我为这个问题编写了很多代码。
你应该更多地关注你正在写的东西,也可能是你正在编码的东西。
除非明确要求您为此任务编写递归函数,否则我会反对。
尝试将任务分解为较小的子问题。其中一些已经解决了:
如果你必须以递归方式进行,那么"提示"相当误导。 not in
语法无效。你看过mylen
函数了吗?
我想它看起来像
def mylen(s):
if not s:
return 0
return 1 + mylen(s[1:])
现在,找到给定元素的(第一个)索引:
def ind(e, l):
if not l: # list is exhausted, element was not found
return 0
elif l[0] == e: # element found
return 0
else # element not found yet
return 1 + ind(e, l[1:])