所以我有一个高度列表:
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
我怎么能绕过这个? 谢谢!
答案 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到高度长度的列表,然后将索引附加到该索引处的高度。