我正在處理兩個列表並試圖線性地執行此操作。我必須看看每個列表元素。要通過第一個列表,我已經使用了一個for循環。然後,我嵌套了第二個循環 - 試着和while - 遍歷我的第二個列表。我試圖將列表排序到更大的排序列表中,因爲我遍歷每個列表元素。我使用了一個計數器來索引第二個列表。在通過第二個列表時,儘管試圖將最高索引值限制爲第二個列表的長度,但我仍然得到'索引'錯誤。如何在列表最大長度限制最大索引後修復索引錯誤?
TLDR - 當我將最高索引指定爲列表的長度時,爲什麼我會不斷收到索引錯誤?
通過谷歌excercises下面列出,代碼工作:
# E. Given two lists sorted in increasing order, create and return a merged
# list of all the elements in sorted order. You may modify the passed in lists.
# Ideally, the solution should work in "linear" time, making a single
# pass of both lists.
def linear_merge(list1, list2):
x = []
j = 0
for item1 in list1:
print("1\t", str(item1))
while item1 >= list2[j] and j < len(list2):
x.append(list2[j])
j += 1
x.append(item1)
我已經得到了以下錯誤:
in linear_merge
while item1 >= list2[j] and j < len(list2):
IndexError: list index out of range
這裏的嘗試與for循環的問題:
def linear_merge(list1, list2):
x = []
j = 0
for item1 in list1:
print("1\t", str(item1))
for item2 in list2[j:]:
print("2\t", str(item2))
if item1 >= item2:
x.append(item2)
if j <= len(list2):
j += 1
else:
x.append(item1)
return x
我用指數做了什麼錯誤?有什麼我在這裏失蹤?
爲什麼測試的順序事while循環運行?既然它不是'or',它會不會退出while循環而不管測試的順序如何,只要一個是錯誤的? – thleo
顯然不是,否則你不會在這裏。你的問題不是停止循環;你的問題是避免出界的錯誤。 –
第二個問題:第一個問題:Python與其他許多語言一樣,在邏輯表達式中使用「快捷方式評估」。在'和'表達式中,如果第一個子條件是假的,則整個條件必然是假的,並且不需要評估第二個子條件。 (當整個條件評估爲False時,你的'while'循環停止。)這個快捷方式也有這樣的優點:第一個子條件可以防止第二個子條件中的索引錯誤。此功能經常使用。 –