如何在不使用枚举的情况下使功能类似于枚举的代码?
我想编写一个代码,列出给定列表中两次出现的数字的值,但它们不允许我们在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
荷兰国际集团的值(如果这是神秘的你),你可以创建一个列表(发电机内涵是类似于yield
荷兰国际集团)的理解和返回代替:
def my_enumerate(sequence, start=0):
return [(start+i, sequence[i]) for i in range(len(sequence))]
你能解释一下xs [i]的功能吗? – struggling
@fip'xs'是你的清单,例如'xs = [5,1,2,4]'。 'xs [i]'会*索引那个列表并得到'i'位置的项目。因此,例如,'xs [0]'将是'5','xs [1]'将是'1','xs [2]'是'2'等等。请参阅[这里](https://docs.python.org/3/tutorial/introduction.html#lists)列出Python教程列表,这是解释:) –
这很有道理!谢谢! – struggling
你自己的枚举函数可能是这样的:
def my_enumerate(a_list):
result = []
counter = 0
for item in a_list:
result.append((counter, item))
counter += 1
return result
不同的是内置的enumerate
,这是一台发电机,在一次产生一个项目,你的函数返回一个列表。
实现您自己的'枚举'功能并使用它。 –
@RickTeachey我不知道从哪里开始。我并不真正理解枚举的概念 – struggling
您可以像您所做的那样创建一个函数。每当你经过循环时计数器都会增加。它返回一个包含项目编号和项目的二元组列表。 –