如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?
Posted
技术标签:
【中文标题】如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?【英文标题】:How to get an index in a list without calling index function or ANY built in functions? 【发布时间】:2017-07-21 12:17:56 【问题描述】:我目前正在尝试构建一个函数来查找数字 (n) 的第二个除数并返回第二个除数的索引而不调用内置索引函数。
xs 是一个列表,n 是要划分的数字
例如:locate_second_divisor([20,3,4,2],12)
产生 2
我当前的代码
count=0
def locate_second_divisor(xs,n):
count=0
for num in xs:
if n % num==0:
count+=1
if count==2:
return
返回时,我需要写第二个除数的索引,但我想不出不调用索引怎么办。
这不是一个重复的问题,因为我不允许使用任何内置函数。我只能使用带有布尔值和运算符的 append、int、float、str 和循环。我不能像类似问题那样使用枚举。我需要某种方式来解决内置函数。
更新代码(仅失败,因为如果没有第二个除数,我必须包含 None)
def locate_second_divisor(xs,n): 计数=0 索引=0 对于 xs 中的 num: 如果(n % 数量)==0: 计数+=1 如果计数 ==2: 回报指数 别的: 返回无
【问题讨论】:
for i, num in enumerate(xs): <your logic> return i
@juanpa.arrivillaga 我不能使用任何内置函数,所以枚举不起作用。
【参考方案1】:
如果我理解正确,您可以像计算满足条件的次数一样跟踪索引。
def locate_second_divisor(xs, n):
count = 0
index = 0
for num in xs:
count += (n % num) == 0
if count == 2:
return index
else:
index += 1
print(locate_second_divisor([20,3,5,3,4], 12))
# 3
有趣的注意事项:
由于(n % num) == 0
的计算结果为True
或False
,因此可以安全地转换为1
和 0,您可以将您的第一个 if
块简化为:count += (n % num) == 0
【讨论】:
好的,我认为这是一个很好的设置,但我仍然没有通过测试。例如,locate_second_divisor([20,3,5,3,4],12) 应该返回 2,但不给出任何值。 @保罗H @ocean.1234 检查你的缩进。它对我来说按预期工作。另请注意,您的示例是错误的。第二个除数是 3 的第二次出现,即第 4 个元素,位于索引 3 处, 你是对的,我的例子是错误的。我看到。不过,我仍然无法通过测试。 还有@Paul H,它需要包含一个不返回任何内容的 else 语句。这是我更新的代码:def locate_second_divisor(xs,n): count=0 index=0 for num in xs: if (n % num)==0: count+=1 if count ==2: return index else: return None @ocean.1234 你不需要最后一个else
,因为None
是默认返回的。亲自查看:print(locate_second_divisor([20,3,5,3,4], 7))
以上是关于如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不指定列名的情况下使用 bigquery 对表中的每一列调用内置函数?