如果列表中的整数小于列表中的前一个整数,则将其删除

时间:2019-07-08 13:40:56

标签: python list

我有一个无序的数字列表

num_list=[3 4 5 1 2 5 6 3 1 2 6 9]

我想遍历该列表并删除所有小于前一个数字的数字,以便在删除此类数字后按升序对列表进行排序。我该怎么办?

预期输出:

num_list=[3 4 5 5 6 6 9]

6 个答案:

答案 0 :(得分:4)

一种简单的方法是将num_list中的值迭代地添加到新列表中,如果它们满足大于最后一个附加值的条件:

out = [num_list[0]]
for i in num_list[1:]:
    if i >= out[-1]:
        out.append(i)

print(out)
# [3, 4, 5, 5, 6, 6, 9]

答案 1 :(得分:0)

使用functools.reduce函数的简短方法:

import functools

num_list = [3,4,5,1,2,5,6,3,1,2,6,9]
res = functools.reduce(lambda x, y: x if y < x[-1] else x + [y],
                       num_list[1:], [num_list[0]])
print(res)

输出:

[3, 4, 5, 5, 6, 6, 9]

答案 2 :(得分:0)

使用list.pop

的简单方法
num_list = [3, 4, 5, 1, 2, 5, 6, 3, 1, 2, 6, 9]

i = 1

while (i < len(num_list)):
    if num_list[i] < num_list[i - 1]:
        num_list.pop(i)
    else:
        i += 1

print(num_list)

# [3, 4, 5, 5, 6, 6, 9]

答案 3 :(得分:0)

对此可以理解:

num_list = [3, 4, 5, 1, 2, 5, 6, 3, 1, 2, 6, 9]
(x for i, x in enumerate(num_list) if all(x >= j for j in num_list[:i]))

尽管它没有Yatu的回答那么有效。

答案 4 :(得分:0)

带有itertools.groupby的版本:

from itertools import groupby

num_list=[3, 4, 5, 1, 2, 5, 6, 3, 1, 2, 6, 9]

out = [num_list[0]]
[out.extend(g) for v, g in groupby(num_list[1:], lambda k: k>=out[-1]) if v]

print(out)

打印:

[3, 4, 5, 5, 6, 6, 9]

答案 5 :(得分:0)

这是使用itertools.accumulate的另一种单线解决方案。

from itertools import accumulate
result = [n for n, cur_max in zip(l, accumulate(l, max)) if n >= cur_max]

尽管简洁,但实际上它的效率要比使用显式for循环的以下解决方案低得多。到目前为止,这也是最有效的解决方案。

cur_max = l[0]
result = []
for e in l:
    if e >= cur_max:
        cur_max = e
        result.append(e)