私が達成しようとしているのは、昇順でソートされた2つのリストを指定して、すべての要素のマージされたリストをソートされた順序で作成して返すことです(merge-sort)。
私が書いたコードは次のとおりです。
def linear_merge(list1, list2):
a = 0
for it2 in list2:
if a < len(list1):
while it2 > list1[a]:
a += 1
if a == len(list1):
break
list1.insert(a, it2)
a += 1
return(list1)
前のIFと組み合わせて、最初は次のwhile条件を使用していました。
while it2 > list1[a] and a < len(list1):
しかし、それは私に次のエラーを与え続けましたlist1 = ['aa', 'xx', 'zz']
、list2 = ['bb', 'cc']
ファイル "/ Users / zainkhaishagi 1 / Downloads / google-python-exercises / basic / list2.py"、35行目、linear_merge、it2> list1 [a]およびa <len(list1):IndexError:リストインデックスが範囲外です
デバッグ時に、while条件にfalseのANDが含まれていても、渡されるインデックスがlist1
範囲外であるように見えます。のインデックスをチェックせずに、falseAND条件がwhile条件をfalseにすることを期待していましたlist1
。どうやら、そうではありません。
最初に持っていたものの順序を変更するだけです:
while it2 > list1[a] and a < len(list1)
に:
while a < len(list1) and it2 > list1[a]
最初の条件がそうTrue
でない場合、それ以上評価されません。追加なしでこの例を見てくださいif
:
def linear_merge(list1, list2):
a = 0
for it2 in list2:
while a < len(list1) and it2 > list1[a]:
a += 1
if a == len(list1):
break
list1.insert(a, it2)
a += 1
return list1
お役に立てば幸いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加