【问题标题】:Slice a list in python在python中切片列表
【发布时间】:2018-04-05 08:52:16
【问题描述】:

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

有人可以帮我吗?

【问题讨论】:

标签: python slice


【解决方案1】:

你甚至可以在一行中做到这一点:

     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]

【讨论】:

    【解决方案2】:

    您可以使用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】:

      从您的列表开始,然后根据您的标准附加到新列表。

      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
      

      显然从循环中的列表中删除条目是一种不好的做法,因此这是一种解决方法。

      【讨论】:

      • list(l) 不是必需的。只需 for num in l: 即可。
      【解决方案4】:

      如果存在数组[i] > 数组[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)
      

      【讨论】:

      • 列表和数组是不同的结构。您的术语可能会让人觉得有些混乱。
      猜你喜欢
      • 1970-01-01
      • 2017-06-24
      • 2015-02-19
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      相关资源
      最近更新 更多