在python中切片列表

时间:2017-10-24 14:01:00

标签: python slice

我在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]

有人可以帮助我吗?

4 个答案:

答案 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]