- Цикл for и функция range в Python
- 1. Цикл for в Python.
- 1.2. Аргумент end фунции print .
- 1.3. Действия во время выполнения цикла for .
- 1.4. Основные ошибки с циклом for .
- 2. 1. Встроенная функция range .
- 2.2. Создание числового списка с помощью функции range .
- 2.4. Перебор списка по индексам с помощью функции range
- 3. Генераторы списков в Python .
- вывести часть последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 на python 3
- 7 ответов 7
Цикл for и функция range в Python
В программирование часто сталкиваются с вопросом перебрать весь список и извлечь из него необходимые данные. Цикл for позволяет перебрать любой итерируемый объект, то есть объект, из которого команда for сможет брать элементы по одному, пока не будет обработан последний элемент, не зависимо от его длины.
Содержание страницы: |
---|
1.1. Цикл for в Python |
1.2. Аргумент end фунции print |
1.3. Действия во время выполнения цикла for |
1.4. Основные ошибки с циклом for |
2.1. Встроенная функция range |
2.2. Создание числового списка с помощью функции range |
2.4. Перебор списка по индексам с помощью функции range |
3. Генераторы списков |
1. Цикл for в Python.
У нас есть список и для того, чтобы не обращаться к каждому элементу по отдельности, мы можем воспользоваться циклом for . В следующем примере переберем список с брендами автомобилей.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(brend) # отступ в 4 пробела
.
ford
opel
audi
land rover
bmw
Во второй строке кода определяется цикл for . Python берет каждую торговую марку из списка и сохраняет его в переменной brend. После двоеточия код на следующей строке должен начинается с 4 пробелами. С помощью функции print, название марки выводится в переменной brand. Затем код повторяется до тех пор, пока не закончатся элементы в списке.
1.2. Аргумент end фунции print .
Функция print выводит свой аргумент, после чего курсор перемещает на следующую строку, но при большом количестве элементов в списке, не всегда это удобно. Можно воспользоваться аргументом end, записав его после переменной.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(brend, end=’ ‘) # отступ в 4 пробела
.
ford opel audi land rover bmw
Аргумент end записывается в виде end= ‘ ‘ . Какое количество пробелов вы укажите, такое и будет после выводится между переменными.
1.3. Действия во время выполнения цикла for .
Во время цикла for помимо вывода элементов, с ними можно выполнять различные действия. К примеру, можно выводить сообщения с каждым проходом цикла, для этого воспользуемся f-строками.
>>> cars = [‘ford’, ‘opel’, ‘audi’, ‘land rover’, ‘bmw’]
>>> for brend in cars :
. print(f»Автомобили торговой марки очень надежные»)
.
Автомобили торговой марки Ford очень надежные
Автомобили торговой марки Opel очень надежные
Автомобили торговой марки Audi очень надежные
Автомобили торговой марки Land Rover очень надежные
Автомобили торговой марки Bmw очень надежные
Со строками цикл for работает также как и со списком.
>>> mesage = ‘Hello World!’
>>> for i in mesage :
. print(i * 5, end=’ ‘)
.
HHHHH eeeee lllll lllll ooooo WWWWW ooooo rrrrr lllll ddddd .
1.4. Основные ошибки с циклом for .
В Python связь одной строки кода с предшествующей строкой обозначается отступами. В больших программах встречаются блоки кода с отступами в несколько разных уровней. Благодаря отступам, сильно упрощается чтение кода. Основные ошибки как раз и складываются из ошибок в пропущенных или лишних отступах.
>>> mesage = ‘Hello World!’
>>> for i in mesage :
. print(i * 5, end=’ ‘) # нет отступа в 4 пробела
File «», line 2
print(i * 5, end=’ ‘)
^
IndentationError: expected an indented block
Для устранения этой ошибки, достаточно поставить в следующей строке после команды for 4 пробела. В основном, если вы работаете в любом современном текстовом редакторе, то после двоеточия он сам поставит отступы на следующей строке.
2. 1. Встроенная функция range .
Встроенная функция range() используется для построения числовых последовательностей. В примере используем команду for и функцию range для выполнения ровно 10 итераций с выводом значения от 0 до 10.
>>> for x in range(10) :
. print(x, end=’ ‘)
.
0 1 2 3 4 5 6 7 8 9
При передаче только одного аргумента, последовательность будет начинаться с 0 и до значения аргумента (10), не включая его. Одна из самых распространённых ошибок, это когда разработчик предполагает, что значение аргумента функции range включается в сгенерированную последовательность.
Приведем пример с двумя аргументами. Выведем последовательность от 20 до 30.
>>> for x in range(20, 30) :
. print(x, end=’ ‘)
.
20 21 22 23 24 25 26 27 28 29
2.2. Создание числового списка с помощью функции range .
>>> numbers = list( range(5, 25) )
>>> print(numbers)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
- Функция range может создавать последовательности, пропуская числа в заданном диапазоне. Например, приведем пример построения списка от 0 до 100, с шагом 15.
>>> numbers = list( range(0, 100, 15) )
>>> print(numbers)
[0, 15, 30, 45, 60, 75, 90]
- С помощью цикла for и функции range можно создавать практически любой числовой список. К примеру, создадим список квадратов всех числе от 1 до 10. Операция возведения в степень обозначается двумя звездочками ( ** ).
>>> a = []
>>> for i in range(1, 11) :
. a.append(i**2)
.
>>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
На каждом цикле переменная возводится в квадрат и добавляется в список.
2.4. Перебор списка по индексам с помощью функции range
С помощью цикла for и функции range список можно перебирать по индексам и с каждым значением в списки, производить любые операции. Приведем пример, перебора списка по индексам, с помощью функции range и функции len, которая определяет длину списка.
>>> list_1 = [1, 3, 5, 10, 12, 20]
>>> for index in range ( len (list_1)):
. list_1[ index ] += 100
.
>>> print(list_1)
[101, 103, 105, 110, 112, 120]
В начале определим длину списка с помощью функции len . Затем это значение передается функции range . В нашем примере длина списка равна 6. С каждым проходом цикла for, index принимает значения от 0 до 6 (не включая 6). В теле цикла мы вызываем список list_1 и обращаемся к элементам списка по индексам, равные значению переменной index . Каждое значение индекса мы увеличивает на 100. Затем с помощью функции print выводим список на экран и видим что все значения увеличены на 100.
С помощью индексов и функции range мы можем объединять информацию из разных списков. В примере ниже мы имеем список с именами, а второй список с фамилиями. Выведем на экран имя и фамилию:
>>> list_4 = [‘Artem’, ‘Serg’, ‘Georgy’, ‘Petr’]
>>> list_5 = [‘Ivanov’, ‘Petrov’, ‘Sidorov’, ‘Ulyanov’]
>>> for index in range ( len (list_4)):
. print(list_4[ index ], list_5[ index ])
.
Artem Ivanov
Serg Petrov
Georgy Sidorov
Petr Ulyanov
В результате получили общие данные на экране.
Аналогично можно создавать новые списки из двух или трех списков. Приведем пример перемножения трех списков:
>>> list_1 = [1, 3, 5, 10, 12, 20]
>>> list_2 = [20, -9, 42, 10, 755, 12]
>>> list_3 = [12, 85, 96, 155, 235, 12]
>>> list_new = []
>>> for index in range ( len (list_1)):
. list_new.append(list_1[ index ] * list_2[ index ] * list_3[ index ])
.
>>> print(list_new)
[240, -2295, 20160, 15500, 2129100, 2880]
В начале мы создадим пустой новый список вне цикла, куда будем добавлять результат с помощью функции append. В результате мы получим новый список с результатом перемножения предыдущих списков по индексам.
Важно помнить, что программа будет работать, если вы уверены, что списки одинаковой длины. Проверить это вы всегда можете с помощью встроенной функции len .
3. Генераторы списков в Python .
Состоящий выше пример построения квадратов чисел в разделе 2.2 состоял из нескольких строк кода. Генератор списка позволяет сгенерировать тот же список, но всего в одной строке. Определите название списка, после откройте квадратные скобки. Запишите выражение для значений, в нашем случает i ** 2. Затем напишите цикл for для генерирования чисел, которые будут передаваться выражению и закройте квадратные скобки.
>>> a = [i ** 2 for i in range(1,11)]
>>> print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
В результате получился аналогичный список.
вывести часть последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 на python 3
Напишите программу, которая выводит часть последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 . (число повторяется столько раз, чему равно). На вход программе передаётся положительное целое число n — столько элементов последовательности должна отобразить программа. На выходе ожидается последовательность чисел, записанных через пробел в одну строку.
Например, если n = 7, то программа должна вывести 1 2 2 3 3 3 4. Sample Input: 7 Sample Output: 1 2 2 3 3 3 4 Вот что получается, проблема в том что на больших числах не работает.
a=int(input()) b='' for i in range(a+1): b = b + (str(i) + ' ')*i print(b[0:a*2])
7 ответов 7
Ваша ошибка в том, что в последнем операторе Вы обрезаете результирующую строку, предполагая, что содержащиеся в ней числа имеют длину в один символ. Но это, естественно, не так. Чтобы избежать этой ошибки, можно, например, использовать списки:
v = [] for i in range(1, n+1): v += [str(i)] * i print(" ".join(v[:n]))
Используя генераторы списков, всё это можно записать в одну строку:
print(" ".join([str(i) for i in range(1, n+1) for j in range(i)][:n]))
Правда, весь вышеприведённый код неэффективный, поскольку генерирует существенно больше данных, чем нужно для вывода на экран.
А вот более эффективный код, который генерирует ровно столько данных, сколько нужно:
v = [] for i in range(1, n+1): c = min(n, i) n = n - c v += [str(i)] * c if n
Не теряя эффективности, но выигрывая в понятности, можно немножко поиграть с генераторами (не путать с генераторами списков!):
def generator(m): c = 0 for i in range(1, m+1): for j in range(i): c += 1 if c > m: return yield str(i) print(" ".join(generator(n)))