如果它们为0且为常数,则删除最后N个元素

时间:2018-12-12 09:36:10

标签: python arrays algorithm numpy

我有一个数组,例如

data = [
  [1, 0],
  [2, 0],
  [3, 1], 
  [4, 1], 
  [5, 1],
  [6, 0],
  [7, 0]]

我希望结果是

verified_data = [[1, 0], [2, 0], [3, 1]]

因此,如果最后一个元素为0,以及最后N个元素相同(除了前一个1),我又如何删除它们。实现此目标的正确方法是什么?也可以使用numpy。

即使看起来很丑,也要按我写的解决方案进行编辑:

def verify_data(data):
    rev_data = reversed(data)
    for i, row  in list(enumerate(rev_data )):
            if row[1] == 0:
                del data[- 1]
            else:
                break
    rev_data = reversed(data)
    last_same_data = None
    for i, row in list(enumerate(rev_data)):
            if not last_same_data:
                last_same_data = row[1]
                continue
            if last_same_data == row[1]:
                del data[-1]
            else:
                break
    return data

1 个答案:

答案 0 :(得分:2)

我将删除尾随零和删除尾随重复项分为两个函数。使用list [-n]索引可避免显式索引跟踪。

In [20]: def remove_trailing_duplicates(dat):
    ...:     key=dat[-1][1]
    ...:     while (len(dat)>1) and (dat[-2][1]==key):
    ...:         dat.pop() # Remove the last item.
    ...:         key=dat[-1][1]  # Reset key to last item.

In [21]: def remove_trailing_zeros(dat):
            # len(dat)>0 can give an empty list, >1 leaves at least the first item 
    ...:     while len(dat)>0 and dat[-1][1]==0: 
                 dat.pop()

In [22]: data = [
    ...:   [1, 0],
    ...:   [2, 0],
    ...:   [3, 1],
    ...:   [4, 1],
    ...:   [5, 1],
    ...:   [6, 0],
    ...:   [7, 0]]

In [23]: remove_trailing_zeros(data)
In [24]: data
Out [24]: [[1, 0], [2, 0], [3, 1], [4, 1], [5, 1]]

In [25]: remove_trailing_duplicates(data)
In [26]: data
Out[26]: [[1, 0], [2, 0], [3, 1]]

这与您在问题中使用的数据一起使用,并且仅检查重复项功能中剩余的一项。对于所有[n, 0]?空列表或剩余的第一项,您想要什么?

HTH