0

[4, 5, 5, 1, 8, 3, 1, 6, 2, 7] というリストが与えられた場合、リスト内の最初の昇順のランを見つけられるようにしたい.. の開始位置を返したいリストとそれが続く期間。したがって、このリストは位置 0 を返し、長さは 2 (4,5) になります。

リストに昇順の実行がない場合は、-1 を返します。

以下は私がこれまでに持っているものですが、プログラムを実行したときに表示される「リスト インデックスが範囲外です」というエラーを修正できないようです。エラーが発生する理由はわかっていますが、どのように修正できるかわかりません。

import random

def generate_integer_list (num_integers, low_range, high_range):
    assert num_integers > 0, "Value must be greater than 0"
    assert low_range < high_range, "Value must be less than high_range"

    x_range = range(num_integers) #Create a range for the below for-loop
    l = [] #Create an empty list

    #A for loop that goes on for the amount of integers the user wants and
    #generates a number within the bounds, then adds that number to the list we created above
    for _x in x_range:
        r = random.randint(low_range, high_range)

        l.append(r)

    print (l)

    length = len(l)
    for x in range(length   ):
        t = l[x+1] - l[x]

        if t == -1:
            print (True)
        else:
            print (False)


generate_integer_list (5, 0, 10)

私が求めているのは、この関数を取得して最初のアセンションを見つけ、位置と長さを返す方法です

4

2 に答える 2

1

これはそれを行う必要があります:

def solve(lis):
    run_length = 0
    ind = 0
    for i, (x, y) in enumerate(zip(lis, lis[1:])):
        if run_length and y-x != 1:
            break
        if y-x == 1:
            if not run_length:
                ind = i
            run_length += 1
    if run_length:
        return run_length+1, ind
    return -1

デモ:

>>> solve([4, 5, 5, 1, 8, 3, 1, 6, 2, 7])
(2, 0)
>>> solve([1, 1, 1, 2, 3, 5, 1, 1])
(3, 2)
>>> solve([1, 1, 1, 1])
-1
>>> solve([1, 2, 5, 6, 7] )
(2, 0)
>>> solve([1, 0, -1, -2, -1, 0, 0])
(3, 3)
于 2013-11-09T21:52:29.273 に答える
1

コードには 3 つの問題があります。

  1. かどうかをテストする代わりに、がポジティブかどうかをテストt == -1する必要があります。tあなたが与える例では、 forは1x=0tなるため、最初の2つの要素は昇順です。
  2. ループのprintに(またはreturn)する必要があります。このようにして、昇順の実行がないかどうかを判断する前に、リスト全体を調べます。False
  3. 昇順の数字が 2 つ見つかったら、実行時間がどれくらい続くかを数え始める必要があります。

これをすべてまとめると:

length = len(l)
run_started = False
for x in range(length-1):
    t = l[x+1] - l[x]
    if t > 0 :
        if run_started:
            run_length += 1
        else:
            run_started = True
            run_length = 2
    else:
        if run_started:
             print True
             print 'Run length:', run_length
             break
if not run_started:
    print False
于 2013-11-09T21:53:37.823 に答える