2017-08-15 48 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)并考虑标记已被接受。谢谢。 –