2015-12-11 1 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

Причина ваш код не работает, потому что вы не объявили переменные x и y все же, вы только установить их во время для цикла (он не знает начальные значения x и y пока).

Кроме того, кажется, вы использовали поиск грубой силы для поиска большего элемента в списке. Вам не нужен, и код также может быть оптимизирован до 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. –

Смежные вопросы