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

Что делает цикл for внутри списка в Python?

Может кто-нибудь объяснить мне последнюю строку этого фрагмента кода Python?

Cell - это еще один класс. Я не понимаю, как цикл for используется для хранения объектов Cell в объекте Column.

class Column(object):

    def __init__(self, region, srcPos, pos):

        self.region = region
        self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line.
4b9b3361

Ответ 1

Строка кода, о которой вы спрашиваете, использует понимание списка, чтобы создать список и назначить данные, собранные в этом списке, на self.cells, Это эквивалентно

self.cells = []
for i in xrange(region.cellsPerCol):
    self.cells.append(Cell(self, i))

Объяснение

Чтобы лучше объяснить, как это работает, несколько простых примеров могут поучительно помочь вам понять код, который у вас есть. Если вы собираетесь продолжить работу с кодом Python, вы снова столкнетесь с пониманием списка, и вы можете захотеть использовать его самостоятельно.

Примечание. В приведенном ниже примере оба сегмента кода эквивалентны тем, что они создают list значений, хранящихся в списке myList.

Например:

myList = []
for i in range(10):
    myList.append(i)

эквивалентно

myList = [i for i in range(10)]

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

В этом примере собираются только пронумерованные значения в списке:

myList = []
for i in range(10):
    if i%2 == 0:     # could be written as "if not i%2" more tersely
       myList.append(i)

и понимание эквивалентного списка:

myList = [i for i in range(10) if i%2 == 0]

Две последние заметки:

  • У вас могут быть "вложенные" списки, но они быстро усложняются:)
  • Понимание списка будет работать быстрее, чем эквивалент for-loop, и поэтому часто является фаворитом обычных программистов на Python, которые обеспокоены эффективностью.

Хорошо, последний пример показывает, что вы также можете применять функции к элементам, которые вы повторяете в списке. Это использует float() для преобразования списка строк в значения с плавающей запятой:

data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]

дает:

new_data
[3.0, 7.4, 8.2]

Ответ 2

Это то же самое, что и вы:

def __init__(self, region, srcPos, pos):
    self.region = region
    self.cells = []
    for i in xrange(region.cellsPerCol):
        self.cells.append(Cell(self, i))

Это называется понятием .