3. Списки и цикл for - Jupyter Notebook
.pdf
19.09.2022, 01:58 |
3. Списки и цикл for - Jupyter Notebook |
Так как же тогда копировать списки? Во-первых, у списков есть метод copy() .
In [94]: |
|
|||
1 |
|
# дубль два |
||
|
||||
2 |
|
l1 = [1, 8, 9, 4] |
||
3 |
|
l2 = l1.copy() |
||
4 |
|
|
|
|
5 |
|
# теперь делаем что угодно |
||
6 |
|
|
|
|
7 |
|
l2[3] = 100 |
||
8 |
|
|
|
|
9 |
|
print(l1) |
||
10 |
|
print(l2) # все нормально |
||
|
|
|
|
|
[1, |
8, |
9, |
4] |
|
[1, |
8, |
9, |
100] |
|
Во-вторых, можно сделать срез и "срезать" весь список:
In [95]:
1 |
# дубль три |
2 |
|
3 |
l1 = [1, 8, 9, 4] |
4 |
l2 = l1[:] # полный срез |
5 |
|
6 |
# теперь делаем что угодно |
7 |
|
8 |
l2[3] = 100 |
9 |
|
10print(l1)
11print(l2) # все нормально
[1, 8, 9, 4] [1, 8, 9, 100]
Цикл for
Раз есть списки, хочется научиться пробегаться по их элементам. Например, выводить на экран не весь список age сразу, а постепенно, каждый элемент с новой строчки. Для этого есть циклы. Рассмотрим цикл for.
In [97]:
1 for i in age:
2print(i)
99
18
19
Как устроен цикл выше? Кодом выше мы доносим до Python мысль: пробегайся по всем элементам списка age ( for i in age ) и выводи каждый элемент на экран ( print(i) ). Вообще любой цикл for имеет такую структуру: сначала указывается, по каким значениям нужно пробегаться, а потом, что нужно
localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/3. Списки и цикл for.ipynb |
11/14 |
19.09.2022, 01:58 |
3. Списки и цикл for - Jupyter Notebook |
делать. Действия, которые нужно выполнить в цикле, указываются после двоеточия в for ‒ эта часть назвается телом цикла.
Буквы в конструкции for могут быть любые, совсем необязательно брать букву i. Python сам поймет, что мы имеем в виду, запуская цикл. Давайте, используя цикл, создадим новый список.
In [106]: |
|
|||
1 |
|
list1 = [1, 3, 5, 9] |
||
|
||||
2 |
|
list2 = [] # новый список |
||
3 |
|
for k in list1: |
||
4 |
|
|
list2.append(k * 2) # добавляем в него значения из k1, умноженные на 2 |
|
5 |
|
print(list2) |
||
|
|
|
|
|
[2, |
6, |
10, |
18] |
|
Конечно, циклы нужны не только для того, чтобы работать со списками. С помощью циклом можно решить любую задачу, которая требует повторения одинаковых действий. Вспомним задачу с семинара про питона, который греется на солнышке и каждый день увеличивает время пребывания на солнце. Тогда мы решали эту задачу, перезапуская ячейку с кодом несколько раз. Теперь воспользуемся циклом.
In [50]:
1 # создадим список с номерами дней
2
3 days = [2, 3, 4, 5, 6, 7, 8, 9, 10] 4
5 # начальное значение времени, которое питон проводит на солнце
6
7 time = 1
8
9 print(1, time)
10
11# теперь будем изменять значение time в цикле
12# и выводить на экран номер дня и время
13
14for d in days:
15time = time + 3
16print(d, time)
1 1
2 4
3 7
4 10
5 13
6 16
7 19
8 22
9 25
10 28
Функция range()
На самом деле, можно было поступить еще проще. В Python есть функция range() , которая позволяет перебирать целые числа на заданном промежутке, не создавая при этом сам список чисел.
localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/3. Списки и цикл for.ipynb |
12/14 |
19.09.2022, 01:58 |
3. Списки и цикл for - Jupyter Notebook |
In [44]:
1 # пример
2
3 for j in range(0, 9):
4print(j)
0
1
2
3
4
5
6
7
8
Правый конец заданного в range() промежутка не включается, будьте бдительны. В примере выше на экран были выведены числа от 0 до 5, число 6 включено не было. Применим range() к нашей задаче про питона:
In [46]: |
|
|
|
1 |
time = 1 |
|
|
2 |
print(1, |
time) |
|
3 |
|
|
|
4 |
for d in |
range(2, |
11): |
5 |
time |
= time + |
3 |
6print(d, time)
1 1
2 4
3 7
4 10
5 13
6 16
7 19
8 22
9 25
10 28
Если мы хотим посмотреть на то, какие значения будут в range() , придется превратить его в список:
In [107]:
1 range(0, 3) # ни о чем
Out[107]:
range(0, 3)
localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/3. Списки и цикл for.ipynb |
13/14 |
19.09.2022, 01:58 |
3. Списки и цикл for - Jupyter Notebook |
In [108]:
1 list(range(0, 18)) # значения внутри range
Out[108]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
Полезный факт: если нас интересуют числа на промежутке, начиная с нуля, в range() левый конец можно не указывать, 0 будет выбран по умолчанию.
In [111]:
1 list(range(18))
Out[111]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
In [ ]: 1
localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/3. Списки и цикл for.ipynb |
14/14 |
