顺序排序列表,但删除以后出现的较低值

时间:2019-03-29 13:03:18

标签: python list loops

我有一个看起来像这样的列表:

var ZPZ_VON = from n in arrivals where n.ZPZ_Von is not null select n;
var ZPZ_BIS = from n in arrivals where n.ZPZ_Bis is not null select n;

我想将此列表从高到低排序,但也要删除已经被列表中较早出现的较低值“拍打”的所有值。因此,上面的列表应如下所示:

[5000, 4000, 3500, 4200, 3300]

我尝试遍历列表并将其与其他所有值进行比较,但是我迷失在for循环中。我想我缺少一些非常明显的东西。

任何帮助或其他文章都将不胜感激!

4 个答案:

答案 0 :(得分:1)

您可以使用列表理解:

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]

答案 1 :(得分:0)

使用如下代码段:

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

nlist结果:

 [5000, 4000, 3500, 3300]

答案 2 :(得分:0)

'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]

答案 3 :(得分:0)

这是一种仅将每个数字与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]