Чистый способ сгруппировать 2 вложенных цикла / итератор в 1? - PullRequest
0 голосов
/ 27 апреля 2020

Допустим, у нас есть 2 последовательных вложенных цикла, таких как:

for p in doc.paragraphs:
    for r in p.runs:
        s = do_something(r)
        if something_else(s, r):
           r.text = another_function(s)

for table in doc.tables:
    for col in table.columns:
        for cell in col.cells:
            for p in cell.paragraphs:
                for r in p.runs:
                    s = do_something(r)
                    if something_else(s, r):
                        r.text = another_function(s)

Есть ли способ сгруппировать их в один l oop, не создавая новую функцию? ( В большинстве случаев создание выделенной функции и вызов ее в каждой вложенной-l oop, чтобы избежать дублирования кода, является лучшим, но здесь я хотел бы изучить другие способы)

Единственное решение, которое у меня есть найдено:

for r in [run for p in doc.paragraphs for run in p.runs] + \
           [run for table in doc.tables for col in table.columns for cell in col.cells for p in cell.paragraphs for run in p.runs]:
    s = do_something(r)
    if something_else(s, r):
        r.text = another_function(s)

Есть ли более чистый способ сгруппировать 2 итератора вместе?

...