Генераторы списков

Просмотр 4 сообщений - с 1 по 4 (из 4 всего)
  • Автор
    Сообщения
  • #991 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Простейшим генератором списка в Python является встроенная функция range:
    range([start=0], stop, [step=1]) – арифметическая прогрессия от start до stop с шагом step.
    При задании одного аргумента range(x) будет сгенерирована последовательность длиной в х, начиная от нуля, с шагом 1.
    Например range(5) = [0,1,2,3,4].
    При задании двух аргументов(аргументы разделяются запятой) будет сгенерирована последовательность ограниченная этими аргументами, при этом верхнее значение не включается в список, с шагом 1.
    Например range(2,5) = [2,3,4].
    Третьим аргументом функции является шаг. Зададим функцию со всеми аргументами,
    например range(1,9,2) = [1,3,5,7].

    #992 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Для создания более сложных последовательностей применяются операторы цикла for и условный if.
    Например
    [x**2 for x in range(5)] = [0,1,4,9,16],
    до оператора цикла задается функция, которая будет применена к каждому элементу последовательности, в данном примере это возведение в квадрат. И обратите внимание, что все выражение должно быть заключено в квадратные скобки.
    Или такой пример:
    [float(x)/2 for x in range(5)] = [0.000,0.500,1.000,1.500,2.000].
    Здесь элементы делятся на 2 и поскольку в результате получаются нецелые числа, то в функции сразу необходимо об этом заявить – float(x).

    #993 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Еще более сложные последовательности можно формировать при помощи условного оператора, например:
    [x**2 for x in range(9) if x % 2 == 0] = [0,4,16,36,64].
    По условию if x % 2 == 0 выбираются четные элементы.

    #995 Score: 1
    Khasan Mamaev
    Модератор
    187 pts

    Мало того, можно использовать и вложенные циклы, например:
    [x+y for x in range(3) for y in [10, 20, 30]] = [10,20,30,11,21,31,12,22,32]

Просмотр 4 сообщений - с 1 по 4 (из 4 всего)
  • Для ответа в этой теме необходимо авторизоваться.