0

何が悪いのかわからない。おそらく配列の制限を超えたと思います。

    def lcs(arr):
      if len(arr) == 0:   # arr of length 0
        return
      sumarr = []
      counter = 0
      sum = 0
      for i in arr:
        if arr[i] > 0:
          sum = sum + arr[i]
        if arr[i] < 0:
          sumarr[counter] = sum
          counter += 1
      print max(sumarr)

私が得るエラーは次のとおりです。

      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "<stdin>", line 8, in lcs
      IndexError: list index out of range
#

コードを少し修正しました

      def lcs(arr):
        if len(arr) == 0:   # arr of length 0
          return
        sumarr = []
        counter = 0
        sum = 0
        for i in arr:
          if i > 0:
            sum = sum + i
          if i < 0:
            sumarr[counter] = sum
            counter += 1
        print max(sumarr)

ただし、このエラーが発生します

      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "<stdin>", line 13, in lcs
      ValueError: max() arg is an empty sequence

私は自分の sumarr[] を常に更新していると思っていました。空のリストを max() に渡しているというエラーが表示されるのはなぜですか?

4

2 に答える 2

1

を実行するとfor i in arriインデックスではなく、配列の要素を (一度に 1 つずつ) 取得します。arr[i]この例で必要なのは、 eachをに置き換えることiです。

于 2013-08-10T13:02:31.437 に答える
1

enumerate を使用して、配列の正しい位置を指すようにします。

   def lcs(arr):
      if len(arr) == 0:   # arr of length 0
        return
      sumarr = []
      counter = 0
      sum = 0
      for count, i in enumerate(arr):
        if arr[count] > 0:
          sum = sum + arr[i]
        if arr[count] < 0:
          sumarr[counter] = sum
          counter += 1
      print max(sumarr)
于 2013-08-10T13:03:06.387 に答える