Python列表迭代

时间:2013-07-10 14:54:11

标签: python list iteration

所以我有一个高度列表:

heights = [1, 2, 3, 5, 7, 8, 8, 13]

我正在使用此函数将每个高度整数值及其索引存储在名为Node的类中的列表中。

def initializeNodes(heights):
    ans = []
    for height in heights:
        ans.append(Node(heights.index(height), height))
    return ans

但我的问题是,因为他们在列表中有两个8位,它们在列表中给出了他们两个相同的前8个位置:

0 1
1 2
2 3
3 5
4 7
5 8
5 8
7 13

我怎么能绕过这个? 谢谢!

3 个答案:

答案 0 :(得分:6)

使用enumerate()生成索引:

def initializeNodes(heights):
    ans = []
    for i, height in enumerate(heights):
        ans.append(Node(i, height))
    return ans

您可以使用列表解析将四行折叠为1:

def initializeNodes(heights):
    return [Node(i, height) for i, height in enumerate(heights)]

答案 1 :(得分:1)

list.index的问题在于它只返回第一次出现该项的索引。

>>> heights = [1, 2, 2, 3, 5, 5, 7, 8, 8, 13]
>>> heights.index(2)
1
>>> heights.index(5)
4
>>> heights.index(8)
7

list.index上的帮助:

  

L.index(value,[start,[stop]]) - >整数 - 返回第一个索引   值。

您可以为start提供与0不同的list.index值,以获取重复项的索引:

>>> heights.index(5,heights.index(5)+1) #returns the index of second 5
5

但这非常麻烦,因为@MartijnPieters已经提到的更好的解决方案是enumerate

答案 2 :(得分:0)

问题是你是从值中生成索引,为什么不反过来呢?

heights = [1, 2, 3, 5, 7, 8, 8, 13]

def initializeNodes(heights):
    ans = []
    for index in range(len(heights)):
        ans.append(Node(index, heights[index]))
    return ans

这将创建一个从0到高度长度的列表,然后将索引附加到该索引处的高度。