2015-12-11 22 views
0

我需要遍历1000个以上的数字列表,并删除第一个数字,如果它比下一个小。取一个列表,并确保它是从最大到最小的删除元素没有排序()

例如:

[10,2,10,8,5,6,1,2,9]将被转换为[10,10,9]

这是我目前的执行:

oddList = [17,2,10,6,3,4,3,8,3,6] 
for x in oddList[x:y]: 
    for y in oddList[x:y]: 
     if x < y: 
      oddList.pop() 
print(oddList) 

这里,oddList应该像[17,10,8,6]。 但是我得到了y在赋值之前出现的错误。这是我程序的最后一部分,我想通过研究pop(),列表操作和参数来解决这个问题。

+0

这不是实际的列表。实际列表来自一个文件,长度为1111个数字。 –

回答

0

你的代码是不工作的原因是因为你还没有声明的变量xy然而,你只在for循环设置它们(它不知道的xy初始值还)。

另外,它似乎你已经使用蛮力搜索在列表中找到更大的元素。你不需要需要蛮力,而且代码也可以优化到O(N)。从列表的末尾开始,并记录当前最大的元素。如果current element<largest element,那么您可以删除当前元素(因为在右侧总是会有一个元素大于它)。

这里的新的实现:

oddList = [3,17,2,10,6,3,4,3,8,3,6] 
maxElement = 0 

for i in range(len(oddList)-1,-1,-1): 
    if(oddList[i] < maxElement): 
     oddList.pop(i) 
     i+=1 
    else: 
     maxElement = oddList[i] 
print(oddList) 

oddList你得到预期的结果,[17, 10, 8, 6]

+0

谢谢你这样做。我想知道,为了将来的参考,如果列表中的第一个数字不是最大的数字?比如如果列表是[3,17,2,10,6,3,4,3,8,3,6]并且您想要相同的输出[17,10,8,6]? –

+0

@Juan:这实际上确实打破了我的程序,谢谢你提醒我。是的,我只是更新了我的程序以使其工作,这只是一个简单的for循环错误。 –