関数を書こうとしています。この関数は、入力として数値のリストを受け取り、このリスト内の連続した数値の最大のシーケンスを見つけ、元のリストのこの最大の数値のシーケンスのみを含むリストを返します。
例:
In [2]: largestSeq([1,2,3,4,1,2,3])
Out[2]: [1, 2, 3, 4]
入力リストに 0 個または 1 個以上の要素が含まれている限り機能します。エラーの場所を確認するために、コードに print ステートメントを含めました。
largestSeq([1])
コードとandを呼び出した結果は次のlargestSeq([1,2])
とおりです。
コード:
def findSeq(seq): #this finds a sequence of consecutive numbers
i = 0 #in a list and returns it
if len(seq) <= 1: #it stops when the next number in the list
return seq #is smaller than the former
s =[seq[0]]
while seq[i] < seq[i+1]:
i += 1
s.append(seq[i])
if i == len(seq)-1:
break
return s
def largestSeq(seq,a=[]):
b = findSeq(seq) #find the first consecutive sequence
if len(seq) == 0:
return a
print 'Length of b is ' + str(len(b))
if len(b) > len(a): #check if found sequence is bigger than
print 'seq is now ' + str(seq)#the last found sequence
print 'b is now ' + str(b)
i = len(b)
print 'now deleting elements of seq'
for d in range (i):
seq.remove(seq[0]) #remove found sequence from the original
#del seq[0:i] #list
print 'seq is now ' + str(seq)
print 'b is now ' + str(b)
return largestSeq(seq,b) #start over
else:
del seq[0:len(b)]
return largestSeq(seq,a)
そして今呼び出し:
In [14]: largestSeq([1])
Length of b is 1
seq is now [1]
b is now [1]
now deleting elements of seq
seq is now []
b is now []
Out[14]: []
largestSeq([1,2])
Length of b is 2
seq is now [1, 2]
b is now [1, 2]
now deleting elements of seq
seq is now []
b is now [1, 2]
Out[15]: [1, 2]
b
最初の呼び出しでは、 の要素を削除した後に の要素も削除されることに注意してください。ただし、seq
変更はしていません! 2 番目の呼び出しで[1,2]
b
は、必要なように動作していますが、whileseq
は削除されています。
と を使用してリストを操作しようlist.remove
としましたdel
(これはコメント アウトされており、同じエラーが発生します)。
何が起こっているのですか?わかりません。2 番目の呼び出しと同じようb
に、最初の呼び出しでも変更しないでください。
これは非常に具体的な質問です。私はどんな提案にも感謝します!