Удалить последние N элементов, если они равны 0 и постоянны - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть массив, такой как

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 голосов
/ 12 декабря 2018

Я разделил удаление конечных нулей и удаление дубликатов на две функции.Использование списка [-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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...