2

だから私は高さのリストを持っています:

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

そして、この関数を使用して、ノードと呼ばれるクラスのリストに各高さの整数値とそのインデックスを格納します。

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

しかし、私の問題は、リストに 2 つの 8 があるため、リストの最初の 8 の位置が同じ 5 になることです。

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

どうすればこれを回避できますか?ありがとう!

4

3 に答える 3

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]]) -> integer -- 値の最初のインデックスを返します。

繰り返し項目のインデックスを取得するために、0 以外のstart値を指定できます。list.index

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

しかし、それは非常に面倒です.@MartijnPietersがすでに述べたように、より良い解決策はenumerate

于 2013-07-10T15:05:04.790 に答える
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 から heights の長さまでのリストが作成され、インデックスが追加され、次にこのインデックスの高さが追加されます。

于 2013-07-10T15:13:19.963 に答える