返回列表中的元素及其在该列表中的位置
returnig elements in a list with their positions in that list
我有一个列表,我想 return 该列表中的每个元素及其在其中的位置。
例如:
my_enumerate(['dog', 'pig', 'cow'])
应该return:
[(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
return给我的:
['(0, dog)', '(0, pig)', '(0, cow)', '(1, dog)', '(1, pig)', '(1, cow)', '(2, dog)', '(2, pig)', '(2, cow)', '(3, dog)', '(3, pig)', '(3, cow)']
该函数的行为应该与内置的枚举函数完全一样,但我不允许使用它。
您的程序生成列表中所有索引和元素的笛卡尔积。它获取每个索引并生成包含列表中元素的所有字符串。另外请注意,您应该只迭代到列表的长度,当您这样做时 len(items) + 1
,您实际上超过了列表的实际长度。
你只能使用第一个循环,像这样
>>> def my_enumerate(items):
... lista = []
... for num in range(len(items)):
... lista.append("({0}, {1})".format(num, items[num]))
... return lista
...
>>> my_enumerate(['dog', 'pig', 'cow'])
['(0, dog)', '(1, pig)', '(2, cow)']
你也可以使用简单的list comprehension,像这样
>>> def my_enumerate(items):
... return ["({0}, {1})".format(num, items[num]) for num in range(len(items))]
...
>>> my_enumerate(['dog', 'pig', 'cow'])
['(0, dog)', '(1, pig)', '(2, cow)']
注1:在Python3.x中,除非必要,否则不必使用格式字符串中的位置。所以,"({}, {})".format
就够了。
注2:如果你真的想要return元组,比如enumerate
,那么你不应该使用字符串格式化,而是像这样准备元组
>>> def my_enumerate(items):
... return [(num, items[num]) for num in range(len(items))]
...
>>> my_enumerate(['dog', 'pig', 'cow'])
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
注意 3: 如果你真的想模拟 enumerate
就像它在 Python 3.x 中一样,那么你最好使用生成器函数,像这样
>>> def my_enumerate(items):
... for num in range(len(items)):
... yield (num, items[num])
...
...
>>> my_enumerate(['dog', 'pig', 'cow'])
<generator object my_enumerate at 0x7f5ff7abf900>
>>> list(my_enumerate(['dog', 'pig', 'cow']))
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
注4:更好的消息是,你可以写出与yield from
and a generator expression相同的my_enumerate
,像这样
>>> def my_enumerate(items):
... yield from ((num, items[num]) for num in range(len(items)))
...
>>> my_enumerate(['dog', 'pig', 'cow'])
<generator object my_enumerate at 0x7f5ff7abfe10>
>>> list(my_enumerate(['dog', 'pig', 'cow']))
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
您可以使用 zip
、range
和 len
:
在一行中轻松完成此操作
def my_enumerate(items):
return zip(range(len(myList)), myList)
my_list = ['dog', 'pig', 'cow']
print(my_enumerate(my_list)) # prints [(0, 'dog'), (1, 'pig'), (2, 'cow')]
以上是 Python 2 版本。请注意,在 Python 3 中, zip
returns 一个生成器,实际上可能正是您所需要的,但是如果您绝对需要一个列表,则可以将返回的表达式包装在 list()
打电话。
如果你把它写成一个生成器,它甚至可以与无限生成器一起工作:
def my_enumerate(items):
i = 0
for e in items:
yield (i, e)
i += 1
print(list(my_enumerate(['dog', 'pig', 'cow']))
最简单的:
def my_enumerate(items):
return list(enumerate(items))
我有一个列表,我想 return 该列表中的每个元素及其在其中的位置。
例如:
my_enumerate(['dog', 'pig', 'cow'])
应该return:
[(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
return给我的:
['(0, dog)', '(0, pig)', '(0, cow)', '(1, dog)', '(1, pig)', '(1, cow)', '(2, dog)', '(2, pig)', '(2, cow)', '(3, dog)', '(3, pig)', '(3, cow)']
该函数的行为应该与内置的枚举函数完全一样,但我不允许使用它。
您的程序生成列表中所有索引和元素的笛卡尔积。它获取每个索引并生成包含列表中元素的所有字符串。另外请注意,您应该只迭代到列表的长度,当您这样做时 len(items) + 1
,您实际上超过了列表的实际长度。
你只能使用第一个循环,像这样
>>> def my_enumerate(items):
... lista = []
... for num in range(len(items)):
... lista.append("({0}, {1})".format(num, items[num]))
... return lista
...
>>> my_enumerate(['dog', 'pig', 'cow'])
['(0, dog)', '(1, pig)', '(2, cow)']
你也可以使用简单的list comprehension,像这样
>>> def my_enumerate(items):
... return ["({0}, {1})".format(num, items[num]) for num in range(len(items))]
...
>>> my_enumerate(['dog', 'pig', 'cow'])
['(0, dog)', '(1, pig)', '(2, cow)']
注1:在Python3.x中,除非必要,否则不必使用格式字符串中的位置。所以,"({}, {})".format
就够了。
注2:如果你真的想要return元组,比如enumerate
,那么你不应该使用字符串格式化,而是像这样准备元组
>>> def my_enumerate(items):
... return [(num, items[num]) for num in range(len(items))]
...
>>> my_enumerate(['dog', 'pig', 'cow'])
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
注意 3: 如果你真的想模拟 enumerate
就像它在 Python 3.x 中一样,那么你最好使用生成器函数,像这样
>>> def my_enumerate(items):
... for num in range(len(items)):
... yield (num, items[num])
...
...
>>> my_enumerate(['dog', 'pig', 'cow'])
<generator object my_enumerate at 0x7f5ff7abf900>
>>> list(my_enumerate(['dog', 'pig', 'cow']))
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
注4:更好的消息是,你可以写出与yield from
and a generator expression相同的my_enumerate
,像这样
>>> def my_enumerate(items):
... yield from ((num, items[num]) for num in range(len(items)))
...
>>> my_enumerate(['dog', 'pig', 'cow'])
<generator object my_enumerate at 0x7f5ff7abfe10>
>>> list(my_enumerate(['dog', 'pig', 'cow']))
[(0, 'dog'), (1, 'pig'), (2, 'cow')]
您可以使用 zip
、range
和 len
:
def my_enumerate(items):
return zip(range(len(myList)), myList)
my_list = ['dog', 'pig', 'cow']
print(my_enumerate(my_list)) # prints [(0, 'dog'), (1, 'pig'), (2, 'cow')]
以上是 Python 2 版本。请注意,在 Python 3 中, zip
returns 一个生成器,实际上可能正是您所需要的,但是如果您绝对需要一个列表,则可以将返回的表达式包装在 list()
打电话。
如果你把它写成一个生成器,它甚至可以与无限生成器一起工作:
def my_enumerate(items):
i = 0
for e in items:
yield (i, e)
i += 1
print(list(my_enumerate(['dog', 'pig', 'cow']))
最简单的:
def my_enumerate(items):
return list(enumerate(items))