[英]Keep getting an error on this program
L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
while L1 or L2:
if L1[-1] < L2[-1]:
L3.append(L2.pop())
else:
L3.append(L1.pop())
if len(L1) == 0:
L3 += L2
break
if len(L2) == 0:
L3 += L1
break
print(L3)
我收到以下錯誤,但不知道為什么我不斷收到此錯誤。 //第7行,如果L1 [-1] <L2 [-1]:IndexError:列表索引超出范圍//
看來您只是想將兩個列表組合在一起,然后對結果進行反向排序。 如果是這樣,則以下內容應該簡單得多:
L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L3 = sorted(L1 + L2, reverse=True)
print(L3)
如果您願意使用自己的方法,那么代碼中的問題只是縮進之一。 您的len(L1)
和len(L2)
檢查僅在else
條件下發生。 這應該解決它:
L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
while L1 or L2:
if L1[-1] < L2[-1]:
L3.append(L2.pop())
else:
L3.append(L1.pop())
if len(L1) == 0:
L3 += L2
break
if len(L2) == 0:
L3 += L1
break
print(L3)
問題似乎在while循環繼續的情況下:L1或L2意味着其中只有一個必須是非空列表。
當其中一個列表變為空列表時,您的代碼將失敗,而另一個列表卻沒有。
您可能想更改(如果您的要求可以的話)
L1 or L2
至
L1 and L2
Znpy
L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
while L1 or L2:
if L1[-1] < L2[-1]:
L3.append(L2.pop())
else:
L3.append(L1.pop())
if len(L1) == 0:
L3 += L2
break
if len(L2) == 0:
L3 += L1
break
print(L3)
輸出:[201、106、103、71、66、44、32、28、17、7、6、1]
您可以只檢查列表的長度,然后在while語句中使用“ and”。
def merge(L1,L2):
L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
if len(L1) == 0 and len(L2) == 0:
return []
while L1 and L2:
if L1[-1] < L2[-1]:
L3.append(L2.pop())
else:
L3.append(L1.pop())
if len(L1) == 0:
L3 += L2
break
if len(L2) == 0:
L3 += L1
break
print(L3)
merge(L1, L2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.