如何在不实际使用枚举的情况下编写功能类似于枚举的代码?
How to make code that's functionally similar to enumerate without actually using enumerate?
我想写一个代码来打印出给定列表中出现两次的数字的值,但它们不允许我们在 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
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
ing 值(如果这对你来说很神秘),你可以创建一个列表(生成器理解类似于 yield
ing)理解和 return 而不是:
def my_enumerate(sequence, start=0):
return [(start+i, sequence[i]) for i in range(len(sequence))]
您自己的枚举函数可能是这样的:
def my_enumerate(a_list):
result = []
counter = 0
for item in a_list:
result.append((counter, item))
counter += 1
return result
与内置的 enumerate
不同,后者是一次生成一个项目的生成器,您的函数返回一个列表。
也可以参考Pythons documentation,其中提出以下建议:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
我想写一个代码来打印出给定列表中出现两次的数字的值,但它们不允许我们在 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
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
ing 值(如果这对你来说很神秘),你可以创建一个列表(生成器理解类似于 yield
ing)理解和 return 而不是:
def my_enumerate(sequence, start=0):
return [(start+i, sequence[i]) for i in range(len(sequence))]
您自己的枚举函数可能是这样的:
def my_enumerate(a_list):
result = []
counter = 0
for item in a_list:
result.append((counter, item))
counter += 1
return result
与内置的 enumerate
不同,后者是一次生成一个项目的生成器,您的函数返回一个列表。
也可以参考Pythons documentation,其中提出以下建议:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1