如何在不使用枚举的情况下使功能类似于枚举的代码?

问题描述:

我想编写一个代码,列出给定列表中两次出现的数字的值,但它们不允许我们在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

实现您自己的'枚举'功能并使用它。 –

+0

@RickTeachey我不知道从哪里开始。我并不真正理解枚举的概念 – struggling

+0

您可以像您所做的那样创建一个函数。每当你经过循环时计数器都会增加。它返回一个包含项目编号和项目的二元组列表。 –

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))] 
+0

你能解释一下xs [i]的功能吗? – struggling

+0

@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教程列表,这是解释:) –

+0

这很有道理!谢谢! – struggling

你自己的枚举函数可能是这样的:

def my_enumerate(a_list): 
    result = [] 
    counter = 0 
    for item in a_list: 
     result.append((counter, item)) 
     counter += 1 
    return result 

不同的是内置的enumerate,这是一台发电机,在一次产生一个项目,你的函数返回一个列表。