Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作';在功能上与enumerate相似,但实际上没有使用enumerate?_Python_List_Function_Python 3.x_Enumerate - Fatal编程技术网

Python 如何制作';在功能上与enumerate相似,但实际上没有使用enumerate?

Python 如何制作';在功能上与enumerate相似,但实际上没有使用enumerate?,python,list,function,python-3.x,enumerate,Python,List,Function,Python 3.x,Enumerate,我假设编写一个代码,打印出给定列表中出现两次的数字的值,但它们不允许我们在python上使用内置函数。如果不使用enumerate,我将如何编写它 def find_second_occurrence(xs,v): count = 0 value = None for i, x in enumerate(xs): if v == x: count += 1 if count == 2:

我假设编写一个代码,打印出给定列表中出现两次的数字的值,但它们不允许我们在python上使用内置函数。如果不使用enumerate,我将如何编写它

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
def find_second_出现(xs,v):
计数=0
值=无
对于枚举中的i,x(xs):
如果v==x:
计数+=1
如果计数=2:
返回i
如果(计数<2):
返回值
枚举(序列)
与以下形式的构造非常相似:

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值(如果这让您感到困惑的话):

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

与内置的
枚举
不同,它是一个一次生成一个项目的生成器,您的函数返回的是一个列表

实现你自己的
枚举
函数并使用它。@RickTeachey我不知道从哪里开始。我真的不理解枚举的概念,你可以做一个和你做的一样的函数。每次通过循环时,计数器都会递增。它返回一个包含项目编号和项目的两个元组的列表。请注意,您返回的不是重复编号的值,而是它的第二个索引。您能解释一下xs[i]的作用吗?@fip
xs
是您的列表,例如
xs=[5,1,2,4]
xs[i]
将为该列表编制索引,并获取位于
i
位置的项目。因此,例如,
xs[0]
将是
5
xs[1]
将是
1
xs[2]
将是
2
,等等。有关列表的Python教程,请参见:)这很有意义!非常感谢。