如何在没有实际使用枚举的情况下使代码在功能上类似于枚举?

时间:2016-10-10 00:06:42

标签: python list function python-3.x 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

2 个答案:

答案 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)是一次生成一个项目的生成器,您的函数返回一个列表。