2017-08-15 373 views
2

我想比較排序列表(我的列表)中每個元素的數字(dist)。列表中的比較,排除和彈出元素(Python)

如果數字小於myList中的第一個元素,那麼我必須繼續並找到正確的dist位置,然後消除myList中的第一個元素並移動列表。

我現在的主要問題是,當dist小於myList中的第一個元素時。該指數超出範圍......

dist = 10 
mylist = [40, 30, 20, 15] # this is a sorted list 

for j in range(0, len(mylist)): 
    if mylist[j] < dist & dist> mylist[j+1]: 
     print (mylist[j], '<' ,dist, '>', mylist[j+1]) 
     #drop 40 
     #shift the list so that is becomes: [30,20, 15,10] 
+2

使用'和'而不是'&'。 –

+0

@ChristianDean有趣的是它仍然有效,因爲按位優先,它變成了mylist [j] < dist > mylist [j + 1]',它仍然是相同的。討論一下運氣...... –

+0

'dist> mylist [j + 1]'這是什麼原因導致你的問題,因爲在for循環的最後一次迭代中,'j'將超出列表中最大的索引,而你將得到錯誤 – KGS

回答

1

IIUC,你要在它的正確位置插入dist和歇工的第一要素。這很好,但你有幾個問題。主要的是你的條件,我不是在談論&。您需要確保dist大於當前值,但小於下一個值。你是這樣做的:

if mylist[j] < dist < mylist[j+1]: 

您還可以運行,直到比len(mylist)一個較小的,以避免索引越界。

您可以使用的另一個技巧是for...else,它適用於其他地方沒有插入dist的角落情況。

總之,試試這個:

for j in range(len(mylist) - 1): 
    if mylist[j] < dist < mylist[j + 1]: 
     mylist.insert(j, dist) 
     mylist = mylist[1:] 
     break 
else: 
    mylist.append(dist) 
    mylist = mylist[1:] 

或者,您可以從1到len(mylist)運行,並且比較檢查mylist[j - 1] < dist < mylist[j]

+0

非常感謝,解釋。它幫助了我很多。 – Silvia

+0

@Silvia沒問題。看看[this](https://stackoverflow.com/help/someone-answers)並考慮標記已被接受。謝謝。 –