我有一个看起来像这样的列表:
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循环中。我想我缺少一些非常明显的东西。
任何帮助或其他文章都将不胜感激!
答案 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]