我在python中有一个列表,如:
l = [1,2,4,5,7,8,2,1]
我想要一个代码来检查列表中的数字是否大于下一个数字。如果是我希望代码删除该号码。我希望我的代码返回[1,2,4,5,7,8]
并删除最后2和1 。
伪代码:
If l[i] > l[i+1]
remove l[i+1]
then check if l[i] is bigger than the next one after that. What use to be l[i+2]
有人可以帮助我吗?
答案 0 :(得分:1)
从您的列表开始,并根据您的标准添加到新列表中。
l = [1,2,4,5,7,8,2,1]
result = []
chk = 0
for num in l:
if chk > num:
pass
else:
chk = num
result.append(num)
print result
显然从循环中的列表中删除条目是不好的做法,所以这是一种解决方法。
答案 1 :(得分:0)
如果有数组[i]>则遍历数组array [i + 1]然后删除数组[i + 1]。
array = [1,2,4,5,7,8,2,1]
l = len(array)
first = 0
secound = 1
while secound != l:
if array[first] > array[secound]:
del array[secound]
l -= 1
else:
first += 1
secound += 1
print(array)
答案 2 :(得分:0)
您可以使用itertools groupby查找符合条件的列表区域;在这种情况下,每个数字都大于进行中的数字:
from itertools import groupby
l = [1,2,4,5,7,8,2,1]
for k, g in groupby(enumerate(l[1:],1), key=lambda (i,e): e>l[i-1]):
if k:
grp=list(g)
print l[grp[0][0]-1:grp[-1][0]+1]
# [1, 2, 4, 5, 7, 8]
这将找到列表中符合该条件的任何区域:
l = [1,2,4,5,7,8,2,5]
for k, g in groupby(enumerate(l[1:],1), key=lambda (i,e): e>l[i-1]):
if k:
grp=list(g)
print l[grp[0][0]-1:grp[-1][0]+1]
# prints [1, 2, 4, 5, 7, 8] and [2, 5]
如果你只想要一组,那么在第一次之后休息:
l = [10, 11, 12, 1, 2]
for k, g in groupby(enumerate(l[1:],1), key=lambda (i,e): e>l[i-1]):
if k:
grp=list(g)
print l[grp[0][0]-1:grp[-1][0]+1]
break
# [10, 11, 12]
答案 3 :(得分:0)
你甚至可以在一行中做到这一点:
l = l[0:1] + [el for index,el in enumerate(l[0:]) if el >l[index-1]]
#l[0:1] + is ugly but i couldnt figure out another way to get the
#first element since in python l[-1] = l[len(l)-1]