この答えのおかげで、私の関数は次のようになります。これは、mylistのすべての値がシーケンシャルであるかどうかをチェックすることです。これは16進リストです。例えば:
mylist1 = ['03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f']
mylist2 = ['03', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f']
def checkmylist(mylist):
it = (int(x, 16) for x in mylist)
first = next(it)
return all(a == b for a, b in enumerate(it, first + 1))
checkmylist(mylist1)
#expected to returns pass
checkmylist(mylist2)
#expected to returns fail
しかし、リストの最後の値がわかっていても、リストをチェックする必要がある関数にもう1つのロジックが必要です。たとえば、
00 to 10 | 00 to 0a(Hex)
ここでは、10が最後の値であることがすでにわかっています。その瞬間、私の関数はカウンターを再初期化する必要があります。これは、それを行うための効率的な方法です。私の関数は、限られた値のセットに対してtrueを返す必要があります。
mylist = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a','00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a']
checkmylist(mylist)
#Expected True
モジュラス演算子を使用して、ゼロからの再起動を処理できます。
mylist = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a',
'00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a']
def checkmylist(mylist, end=10):
end += 1
it = (int(x, 16) for x in mylist)
first = next(it)
return all(a % end == b for a, b in enumerate(it, first + 1))
checkmylist(mylist) # returns True
10以外の既知の終了値の場合、関数の2番目のパラメーターを使用する必要があります(例checkmylist(mylist, end=14)
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加