Подтвердить что ты не робот

Как читать вслух советы Python List?

Мой вопрос о читаемости Python List Consrehension. Когда я сталкиваюсь с кодом с комплексным/вложенным пониманием списка, я считаю, что мне нужно перечитать их несколько раз, чтобы понять намерение.

Есть ли интуитивный способ читать вслух список списков? Похоже, что я должен начать "чтение" с середины, а затем прочитать условия if (если они есть) и прочитать последнее выражение .

Вот как я прочитал бы следующую строку кода вслух, чтобы понять это:

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

"Для каждого элемента в List x и каждого элемента в List y, если два элемента не совпадают, создать список кортежей."

Два примера, с которыми я борюсь: Как бы вы вслух прочитали следующие справки List?

  • Из другого вопроса в Stack Overflow: [x for b in a for x in b]

  • Документы Python имеют следующий пример: [[row[i] for row in matrix] for i in range(4)]

Любые предложения или указатели на способы чтения общедоступных списков, такие, что намерение становится яснее, очень ценятся.

4b9b3361

Ответ 1

Я обычно разворачиваю это в своем уме в цикл генерации, поэтому, например,

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

- это понимание списка для генератора

for x in [1,2,3]:
    for y in [3,1,4]:
        if x != y:
            yield (x, y)

Пример # 1

[x for b in a for x in b] - это понимание для

for b in a:
    for x in b:
        yield x

Пример результата для a = [[1,2,3],[4,5,6]]: [1, 2, 3, 4, 5, 6]


Пример # 2

[[row[i] for row in matrix] for i in range(4)] (обратите внимание, что внутреннее выражение - другое понимание!):

for i in range(4):
    yield [row[i] for row in matrix]

который разворачивается

for i in range(4):
    l = []

    for row in matrix:
        l.append(row[i])

    yield l

Ответ 2

"Построить список X на основе Y и Z, для которых Q истинно."