gpt4 book ai didi

python - 复制枚举函数的功能而不使用它

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:37 25 4
gpt4 key购买 nike

有人要求我复制枚举函数。也就是说,当给定一个 int 或 string 列表时,输出应该是每个元素及其索引的元组列表。

list entered = [1, 2, 3, 4]

expected outcome = [(0, 1), (1, 2), (2, 3), (3, 4)]

大部分情况下是可行的。重复元素时会出现此问题。

这是我的代码:

def my_enumerate(items):
""" return tuples with index and number"""
tuple_list = []
for i in items:
tuple_list.append((items.index(i), i))
return tuple_list

当输入包含重复元素的列表时,

ans = my_enumerate(['x', 'x', 'x'])
print(ans)

expected outcome : [ (0, 'x'), (1, 'x'), (2, 'x') ]

actual outcome : [ (0, 'x'), (0, 'x'), (0, 'x') ]

我应该对我的代码做哪些更改?

谢谢

最佳答案

您的问题是元素可以重复但索引是唯一的。此外,根据元素查找索引通常是O(n),而列表的重点是根据其索引获取元素,是O(1).

因此,不是迭代元素,而是迭代索引并获取元素:

def my_enumerate(items):
tuple_list = []
for i in range(len(items)):
tuple_list.append((i, items[i]))
return tuple_list

或者更简洁:

def my_enumerate(items):
return [(i, items[i]) for i in range(len(items))]

两者都给出:

>>> my_enumerate([1, 2, 3, 4])
[(0, 1), (1, 2), (2, 3), (3, 4)]

>>> my_enumerate(['x', 'x', 'x'])
[(0, 'x'), (1, 'x'), (2, 'x')]

为了使其更符合 enumerate 的 generator-y 精神,我们可以分别将函数更改为:

def my_enumerate(items):
for i in range(len(items)):
yield (i, items[i])

和:

def my_enumerate(items):
yield from ((i, items[i]) for i in range(len(items)))

现在您可以像常规 enumerate 一样对其进行迭代,或者如果您希望将其作为列表,只需执行以下操作:list(my_enumerate(items))

关于python - 复制枚举函数的功能而不使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com