使用for循环创建元组。

时间:2016-01-30 22:14:23

标签: python list for-loop tuples

我是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

2 个答案:

答案 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循环内部是错误的,因为您永远不会增加indexelement是一个列表,而不是输入列表中的单个元素。

以下是工作解决方案的评论版本:

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