Получить все значения, которые имеют определенное предыдущее и следующее значение - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий список, содержащий кортежи:

ov=[(0,), (1,), (0,), (0,), (0,), (0,), (1,), (1,), (1,), (1,), (1,), (0,), (1,), (1,), (1,), (0,), (1,), (1,), (1,), (1,), (1,), (None,)]

Теперь я хочу, чтобы все значения 1 и предыдущее значение 0 сохранялись в отдельном списке.

Последнее значение, которое сохраняется каждый раз, должно быть 0 или, если есть значение None, оно не должно сохраняться.

Поэтому я хотел бы получить результат, который будет:

result =[1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]

Я уже получил следующую функцию:

def previous_and_next(something):
    prevs, items, nexts = tee(something, 3)
    prevs = chain(["NONE"], prevs)
    nexts = chain(islice(nexts, 1, None), ["NONE"])
    return zip(prevs, items, nexts)

И следующее для цикла:

for previous, item, nxt in previous_and_next(ov):
    if item[0]==1 and previous[0]==0 and nxt[0]==1:
        print("This is the start value of my wanted values")
        print(previous)
        print(item)
        print(nxt)

с выводом:

This is the start value of my wanted values
(0,)
(1,)
(1,)
This is the start value of my wanted values
(0,)
(1,)
(1,)
This is the start value of my wanted values
(0,)
(1,)
(1,)

Может кто-нибудь помочь мне преобразоватьэтот цикл, чтобы он возвращал желаемый результат?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019
my_result = []
is_zero = None
for o in ov:
    if o[0]==1:
        my_result.append(o[0])
        is_zero = False
    elif o[0]==0 and is_zero == False:
        my_result.append(o[0])
        is_zero=True
print(my_result)
0 голосов
/ 27 февраля 2019

Надеюсь, что комментарии в этом коде говорят сами за себя:

ov=[(0,), (1,), (0,), (0,), (0,), (0,), 
    (1,), (1,), (1,), (1,), (1,), (0,), 
    (1,), (1,), (1,), (0,), (1,), (1,), (1,), (1,), (1,), (None,)]

my_len = len(ov)
result = []
i = 0
while (i < my_len):
    # Skip over the zeros
    while ((i < my_len) and not ov[i][0]):
        i += 1

    # Gobble up the 1's
    while ((i < my_len) and ov[i][0]):
        result.append(1)
        i += 1

    # Append the 0 appearing after the 1's
    if ((i < my_len) and (ov[i][0] is not None)):
        result.append(0)

print(result)

Вывод:

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