Python 如何制作';在功能上与enumerate相似,但实际上没有使用enumerate?
我假设编写一个代码,打印出给定列表中出现两次的数字的值,但它们不允许我们在python上使用内置函数。如果不使用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:
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]的作用吗?@fipxs
是您的列表,例如xs=[5,1,2,4]
xs[i]
将为该列表编制索引,并获取位于i
位置的项目。因此,例如,xs[0]
将是5
,xs[1]
将是1
,xs[2]
将是2
,等等。有关列表的Python教程,请参见:)这很有意义!非常感谢。