我有一个列表,我想返回列表中的每个元素及其在其中的位置。你知道吗
例如:
my_enumerate(['dog', 'pig', 'cow'])
应返回:
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
以下是我的做法:
def my_enumerate(items):
''' returning position of item in a list'''
lista = []
for num in range(0, len(items)+1):
for item in items:
lista.append("({0}, {1})".format(num, item))
return lista
我想到了:
['(0, dog)', '(0, pig)', '(0, cow)', '(1, dog)', '(1, pig)', '(1, cow)', '(2, dog)', '(2, pig)', '(2, cow)', '(3, dog)', '(3, pig)', '(3, cow)']
该函数的行为应该与内置的枚举函数完全相同,但我不允许使用它。你知道吗
您可以使用
zip
、range
和len
在一行代码中轻松完成:以上是python2版本。注意,在python3中,
zip
返回一个生成器,它实际上可能正是您所需要的,但是如果您确实需要一个列表,您可以将返回的表达式包装在list()
调用中。你知道吗程序生成列表中所有索引和元素的笛卡尔积。它获取每个索引并生成包含列表中元素的所有字符串。另外,请注意,您应该只迭代到列表的长度,当您执行
len(items) + 1
操作时,您实际上超过了列表的实际长度。你知道吗只能使用第一个循环,如下所示
也可以使用一个简单的list comprehension,如下所示
注1:在Python3.x中,除非有必要,否则不必使用格式字符串中的位置。所以,
"({}, {})".format
就足够了。你知道吗注2:如果您真的想返回元组,比如^{} ,那么您不应该使用字符串格式,而是像这样准备元组
注3:如果您真的想模拟
enumerate
,就像它在python3.x中工作一样,那么您最好使用一个生成器函数,如下所示注4:更多的好消息是,您可以使用^{} 和generator expression编写相同的
my_enumerate
,如下所示如果将其编写为生成器,它甚至可以与无限个生成器一起工作:
相关问题 更多 >
编程相关推荐