Упорядочить список последовательно, но убрать более низкие значения, которые появятся позже - PullRequest
1 голос
/ 29 марта 2019

У меня есть список, который выглядит следующим образом:

[5000, 4000, 3500, 4200, 3300]

И я хочу упорядочить этот список от высокого к низкому, но также удалить все значения, которые уже «побиты» более низким значением, появляющимсяранее в списке.Таким образом, приведенный выше список должен выглядеть следующим образом:

[5000, 4000, 3500, 3300]

Я пробовал перебирать список и сравнивать его с любым другим значением, но я теряюсь в циклах for.Я думаю, что мне не хватает чего-то очень очевидного.

Любая помощь или другая статья с благодарностью!

Ответы [ 4 ]

1 голос
/ 29 марта 2019

Вы можете использовать понимание списка:

d = [5000, 4000, 3500, 4200, 3300]
new_d = [a for i, a in enumerate(d) if not i or d[i-1] > a]

Вывод:

[5000, 4000, 3500, 3300]
0 голосов
/ 29 марта 2019

Вот подход, который сравнивает только каждое число с последним значением new_d:

d = [5000, 4000, 3500, 4200, 3300]
new_d = d[:1]
for item in d[1:]:
    if item < new_d[-1]:
        new_d.append(item)
print(new_d)

>>> [5000, 4000, 3500, 3300]
0 голосов
/ 29 марта 2019

'beat' by a lower value appearing earlier in the list означает, что вы можете запишите текущее минимальное число и сравните с ним. Если число больше минимального, удалите его, если оно меньше, добавьте к результату и обновите минимум.

Сложность времени: O (n)
Пространственная сложность: O (1)

def trim_list_high_to_low(nums):
    min_num = float('inf')
    result = []
    for num in nums:
        if num <= min_num:
            result.append(num)
            min_num = num
    return result

Выход: [5000, 4000, 3500, 3300]

0 голосов
/ 29 марта 2019

Используйте такой фрагмент кода:

prev = 2**31
nlist = []
for i in your_list:
    if i < prev:
        nlist.append(i)
        prev = i

nlist результат:

 [5000, 4000, 3500, 3300]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...