使用for循环创建元组列表

4
我希望从列表和列表中每个元素的位置创建元组列表。以下是我的尝试:
def func_ (lis):
    ind=0
    list=[]
    for h in lis:
       print h
       return h

假设函数的参数:

lis=[1,2,3,4,5]

我想知道如何使用ind。
期望输出:
[(1,0),(2,1),(3,2),(4,3),(5,4)]

请对您的代码进行格式化,以便正确阅读(高亮显示代码,然后点击看起来像{}的按钮)。 - Bryan Oakley
1个回答

7

您可以使用 enumerate列表推导式 更轻松地完成此操作:

>>> lis=[1,2,3,4,5]
>>> [(x, i) for i, x in enumerate(lis)]
[(1, 0), (2, 1), (3, 2), (4, 3), (5, 4)]
>>>

您可能还考虑使用 @PadraicCunningham 建议的 xrangelenzip

>>> lis=[1,2,3,4,5]
>>> zip(lis, xrange(len(lis))) # Call list() on this in Python 3
[(1, 0), (2, 1), (3, 2), (4, 3), (5, 4)]
>>>

这些函数的文档可以在这里找到。


如果你必须定义自己的函数,那么可以这样做:

def func_(lis):
    ind = 0
    lst = [] # Don't use 'list' as a name; it overshadows the built-in
    for h in lis:
        lst.append((h, ind))
        ind += 1 # Increment the index counter
    return lst

示例:

>>> def func_(lis):
...     ind = 0
...     lst = []
...     for h in lis:
...         lst.append((h, ind))
...         ind += 1
...     return lst
...
>>> lis=[1,2,3,4,5]
>>> func_(lis)
[(1, 0), (2, 1), (3, 2), (4, 3), (5, 4)]
>>>

1
更简洁的写法:zip(lis, itertools.count()) - augurar
1
@augurar,不需要使用itertools,可以使用zip(lis, xrange(len(lis))) - Padraic Cunningham
1
@PadraicCunningham - 很好!我会把它加入到我的答案中。 :) - user2555451
@iCodez,我尝试了那些方法。我想使用函数。 - Alph
@Phil2014 - 看看我的编辑。但请注意,我提供的前两个解决方案会更有效率。 - user2555451
@iCodez。这正是我所需要的。非常感谢。 - Alph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接