Проверьте, сколько одинаковых символов строки оп в списке - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть список python, например

l=[0,1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] 

. Я хочу проверить, содержит ли список хотя бы 7 1's рядом друг с другом.

Я не уверен, как это проверить.

, чтобы уточнить:

a=[0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] #should return True   
b=[0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0 ] #should return False 

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 17 февраля 2020

Очень простой способ - объединить список в строку и проверить, есть ли здесь 1...:

l_true = [0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] #should return True
l_false = [0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0 ] #should return False


check = lambda x: '1'*7 in ''.join(str(num) for num in x)

print(check(l_true))
>>> True
print(check(l_false))
>>> False
1 голос
/ 17 февраля 2020

Вы можете проверить, совпадает ли любой подсписок из 7 элементов со списком из 7 из 1:

def f(l):
    pat = [1] * 7
    for i in range(len(l)-7):
        if l[i: i+7] == pat: 
            return True

    return False 

та же идея в следующем однострочном коде:

[1] * 7 in (l[i:i+7] for i in range(len(l) - 7))
0 голосов
/ 06 марта 2020

Просто так:

alist = [0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]

def is_sequence_exist(alist, count, item):
    _count = 0
    for elem in alist:
        if elem == item:
            _count += 1
            if _count == count:
                return True
        else:
            _count = 0

    return False


print(is_sequence_exist(alist, 2, 1))
0 голосов
/ 17 февраля 2020

Это один подход, использующий itertools.groupby.

Пример:

from itertools import groupby

data = [[0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0]]
for i in data:
    if any((k==1 and len(list(v)) >=7) for k, v in groupby(i) ):
        print("Ok", i)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...