Перебор списка. И сравнение его элементов

обычное задание егэ информатика

В общем подскажите как брать три элемента перебирая текстовый файл, чтобы потом проводить проверки с элементов. И пожалуйста что то не в одну строку. Ps"для людей а не для ии"

введите сюда описание изображения


Ответы (3 шт):

Автор решения: Stanislav Volodarskiy

triples перебирает тройки подряд идущих элементов из последовательности:

def triples(seq):
    it = iter(seq)
    for a in it: break
    for b in it: break
    for c in it:
        yield a, b, c
        a, b = b, c


r = range(10)
for t in triples(r):
    print(t)
$ python triples.py
(0, 1, 2)
(1, 2, 3)
(2, 3, 4)
(3, 4, 5)
(4, 5, 6)
(5, 6, 7)
(6, 7, 8)
(7, 8, 9)

P.S. for a in it: break хочется заменить на a = next(it), но вторая конструкция сломается на пустой последовательности seq, а первая её правильно обработает. То же самое для следующего for b in it: break и последовательности из одного элемента.

P.P.S. tuples позволяет вернуть кортежи любой заданной длины k:

def tuples(seq, k):
    it = iter(seq)
    ab = tuple(x for _, x in zip(range(k - 1), it))
    for c in it:
        yield *ab, c
        ab = ab[1:] + (c, )


r = range(10)
for t in tuples(r, 4):
    print(t)
$ python tuples.py
(0, 1, 2, 3)
(1, 2, 3, 4)
(2, 3, 4, 5)
(3, 4, 5, 6)
(4, 5, 6, 7)
(5, 6, 7, 8)
(6, 7, 8, 9)
→ Ссылка
Автор решения: CrazyElf

А вообще тройки перебирать проще всего через zip списка с самим собой, но со сдвигом:

s = list(range(10))
for x, y, z in zip(s, s[1:], s[2:]):
    print(x, y, z)
→ Ссылка
Автор решения: Vladimir Bogdanov

Решение на итераторах для не только трех элементов. В параметре quantity задается требуемое количество элементов. Вместо data подставьте итератор по файлу.

from collections.abc import Iterable
import itertools

def get_elements(data: Iterable, quantity:int):
    iters = (itertools.islice(data, i, None) for i in range(quantity))
    yield from zip(*iters)

data=range(5)
print(*get_elements(data, 3))
→ Ссылка