我是Python的新手,虽然我已经完成了对Codecademy的一些复习,但我在完成第一项任务时遇到了困难。
“任务1:请打开代码框架文件”i772_assg1.py“并实现函数list_ele_idx(li)。您必须编写一个”for循环“来读取列表的元素,并为每个元素你创建一个元组(元素,索引)来记录列表中的元素及其索引(位置)。这个函数以列表“li”作为参数。函数的返回值应该是一个列表(元素,索引)在主要方法中,我为任务1编写了一个测试用例。请取消评论测试用例并测试你的功能。“
这是我正在尝试的,但我没有得到任何东西。任何反馈将不胜感激,因为这是我在Stack Overflow上的第一篇文章!
def list_ele_idx(li):
index = 0 # index
element = [(5,3,2,6)]
li = [] # initialze a list; you need to add a tuple that includes an element and its index to this list
# your code here. You must use for loop to read items in li and add (item,index)tuples to the list lis
for index in li:
li.append((element, index))
return li # return a list of tuples
答案 0 :(得分:7)
让我们一步一步地浏览您的代码,以便了解您所犯的错误,然后让我们看一下正确的解决方案。最后,让我们看看可能会惹恼你老师的pythonic解决方案。
该行
index = 0
很好,因为你想开始将指数计数为零。这条线
element = [(5,3,2,6)]
毫无意义,因为您的函数应该适用于任何给定的列表,而不仅仅适用于您的测试用例。所以,让我们删除它。 使用
初始化结果列表li = []
如果您不重用给定输入列表li
的名称,这将丢弃给予该函数的参数,那么这将是正常的。使用
result = []
代替。接下来,您将使用
循环显示现在空的列表li
for index in li:
并且此时li
为空,循环体将永远不会执行。命名循环变量index
令人困惑,因为您使用该语法循环遍历列表的元素,而不是通过索引。
li.append((element, index))
在for
循环内部是错误的,因为您永远不会增加index
而element
是一个列表,而不是输入列表中的单个元素。
以下是工作解决方案的评论版本:
def list_ele_idx(li):
index = 0 # start counting at index 0
result = [] # initialize an empty result list
for item in li: # loop over the items of the input list
result.append((item, index)) # append a tuple of the current item and the current index to the result
index += 1 # increment the index
return result # return the result list when the loop is finished
使用enumerate(li)
可以为您提供更简单的解决方案,但我并不认为这符合练习的精神。无论如何,简短的解决方案是:
def list_ele_idx(li):
return [(y,x) for x,y in enumerate(li)]
答案 1 :(得分:1)
查看Python的枚举函数,它为您提供迭代的元素及其索引:
def list_ele_idx(li):
tuple_list = []
for index, item in enumerate(li):
tuple_list.append((index, item))
return tuple_list