我想编写一个代码,打印出在给定列表中出现两次的数字的值,但它们不允许我们在python上使用内置函数。如何在不使用枚举的情况下编写它?
def find_second_occurrence(xs,v):
count = 0
value = None
for i, x in enumerate(xs):
if v == x:
count += 1
if count == 2:
return i
if (count < 2):
return value
答案 0 :(得分:1)
enumerate(sequence)
非常类似于表单的构造:
for i in range(len(sequence)):
# get sequence[i] and return i and sequence[i] for all i's
因此,在您的代码中,完全替换enumerate
可以通过以下方式完成:
for i in range(len(xs)):
x = xs[i]
if v == x:
count += 1
if count == 2:
return i
或者,没有指定x
名称暂时保留序列项目:
for i in range(len(xs)):
if v == xs[i]:
count += 1
if count == 2:
return i
创建一个小my_enumerate
函数,也很简单:
def my_enumerate(sequence, start=0):
for i in range(len(sequence)):
yield start+i, sequence[i]
start
也被定义为与enumerate
中使用的匹配,并获得默认值0
。
而不是yield
值(如果这对你来说很神秘),你可以创建一个列表(生成器理解类似于yield
ing)理解并返回:
def my_enumerate(sequence, start=0):
return [(start+i, sequence[i]) for i in range(len(sequence))]
答案 1 :(得分:1)
你自己的枚举函数可能是这样的:
def my_enumerate(a_list):
result = []
counter = 0
for item in a_list:
result.append((counter, item))
counter += 1
return result
与内置enumerate
不同,内置fclose(op)
是一次生成一个项目的生成器,您的函数返回一个列表。