Проверка списка для последовательности
Я хочу проверить, имеет ли список определенную последовательность элементов. Я отсортировал список, содержащий 7 элементов, теперь я хочу проверить, что первые 4 совпадают друг с другом, а последние 3 совпадают друг с другом.
Для того, что я хочу достичь, чтобы быть правдой, список будет выглядеть следующим образом:
list = ['1','1','1','1','2','2','2']
Я надеюсь, что это сделает то, что я хочу добиться более ясного.
Ответы
Ответ 1
Вы можете нарезать список. Возьмите первые четыре элемента:
>>> L = ['1','1','1','1','2','2','2']
>>> L[:4]
['1', '1', '1', '1']
и последние три:
>>> L[-3:]
['2', '2', '2']
A set не позволяет дублировать. Поэтому:
>>> set(L[:4])
{1}
Это означает, что если длина этого набора равна 1, все элементы в нарезанном списке одинаковы.
Объединяя все это:
>>> len(set(L[:4])) == 1 and len(set(L[-3:])) == 1
True
показывает, что ваше условие выполнено.
Ответ 2
Это должно работать, просто передайте каждый из ваших подписок в функцию:
def all_same(items):
return all(x == items[0] for x in items)
Выше было следующее сообщение: Python: определить, являются ли все элементы списка одним и тем же элементом
Ответ 3
Если вы хотите проверить, содержит ли список 3 элемента одного элемента и 4 элемента другого, вы можете опустить сортировку с помощью collections.Counter
:
content = Counter(['1', '2', '2', '1', '1', '2', '1']).most_common()
print(content) # => [('1', 4), ('2', 3)]
if len(content) == 2 and content[0][1] == 4 and content[1][1] == 3 or
len(content) == 1 and content[0][1] == 7:
pass # Your list have desired structure
Ответ 4
Основываясь на дополнительных деталях вопроса, это может решить проблему:
def check_group_equal(inputList):
ref = inputList[0]
for e in inputList[1:]:
if e != ref:
return False
return True
list = some_random_list(length=7)
# Check first group
check_group_equal(list[0:3])
# Check second group
check_group_equal(list[4:7])
Ответ 5
Если вы можете преобразовать свой список в строку, re
будет делать:
re.match(r'^(.)\1{3}(.)\2{2}$', ''.join(['1','1','1','1','2','2','2']))