求問為什麼不能合併兩個列表?

明明自己推算了好久,但是一運行就變得很奇怪,是代碼出了什麼問題嗎?求大神幫忙!!謝謝!!!

list1 = [1,3,5,7,9]

list2 = [0,2,4,6,8]

list3 = []

for i in range(5):

for x in range(5):

if list1[i] &> list2[x]:

list3.append(list2[x])

x += 1

else:

list3.append(list1[i])

i += 1

print list3


錯誤之處好幾個

1、for 循環中的變數i,x 不需要在循環體里再加1。

2、用for 循環嵌套for 循環,多添加了很多元素。

下面的代碼前提是list1 和 list2 長度想等,只對這二個特定list有效。

來做做題

黃哥出題了,訓練Python初學者循環的基本功


return sorted(list1+list2)


一個for循環執行5次,兩個就是25次,所以結果是25個數。

看題主的代碼應該是合併兩個數組再排序,既然這樣,為什麼不分成兩個步驟,而選擇嵌套在一起呢?

如果是我,我會這樣寫:

list3 = sorted(list1+list2)


list1 = [1,2,3,4,5,7,9,10,11]
list2 = [0,2,4,6,8,10]
list3 = []

i,j = 0,0

while i& list2[j]:
list3.append(list2[j])
j+=1
else:
list3.append(list1[i])
list3.append(list2[j])
i += 1
j += 1
else:
if i&

用於處理 list1 和 list2 長度不一定相等,並/或有重複值出現的情況

可能有更好的演算法,求討論


錯在哪黃哥已經指導得很清楚了。

建議你用可以調試的編輯器吧,例如pycharm或者vscode等等,這樣有錯誤並且想不通的時候可以一步一步調試,能讓你清楚自己錯在哪,比花時間在網上問要省時省力還能加深印象。

個人覺得現在這年代沒必要像你這麼樸素。


按照題主的思想,應該把for換成while


能說一下想要程序做什麼嗎,先寫成 pseudo code 比較容易理解


list3 = list(set(list1+list2))


這其實就是歸併排序演算法中的兩個有序數組歸併(為什麼我要說數組?因為python中列表就是數組實現噠)

代碼的問題在於循環上出了錯,而且是代碼邏輯上的錯誤,建議題主再仔細對照二路歸併演算法審查代碼。直接給出正確的代碼對題主幫助不大,授之以魚不如授之以漁。


推薦閱讀:

TAG:Python | Python入門 | Python編程 |