2016-10-10 22 views
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 
+0

實現您自己的'枚舉'功能並使用它。 –

+0

@RickTeachey我不知道從哪裏開始。我並不真正理解枚舉的概念 – struggling

+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荷蘭國際集團)的理解和返回代替:

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

1

你自己的枚舉函數可能是這樣的:

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

不同的是內置的enumerate,這是一臺發電機,在一次產生一個項目,你的函數返回一個列表。