#!/usr/bin/env python # coding: utf-8 # # Python для сбора и анализа данных # # *Алла Тамбовцева, НИУ ВШЭ* # # *Данный ноутбук частично основан на [лекции](http://nbviewer.math-hse.info/github/ischurov/pythonhse/blob/master/Lecture%202.ipynb) Щурова И.В., курс «Программирование на языке Python для сбора и анализа данных» (НИУ ВШЭ).* # ## Списки и цикл `for` # ### Знакомство со списками # Создадим список значений возраста респондентов, список `age`: # In[ ]: age = [23, 25, 32, 48, 19] # возраст age # In[ ]: name = ["Анна", "Виктор", "Дмитрий", "Алёна", "Павел"] # имена # In[ ]: mix = [23, 25, "нет ответа", 32, "нет ответа"] # все вместе # In[ ]: type(mix) # In[ ]: len(age) # пять элементов # In[ ]: empty = [] len(empty) # In[ ]: print(age[0]) # первый элемент age print(age[1]) # In[ ]: print(age[7]) # In[ ]: print(age[-1]) # последний элемент - он же первый с конца # In[ ]: age[-2] # ### Изменение и добавление элементов # In[ ]: age[0] = 32 # заменили первый элемент на 32 age # In[ ]: nums = [1, 5, 8, 9] # In[ ]: nums.append(10) # добавили 10 nums # In[ ]: nums.extend([12, 13]) # добавили 12 и 13 nums # In[ ]: L = [] L.append(6) L.append(8) L # In[ ]: nums.extend(6) # случай 1: один элемент не добавится # In[ ]: [1, 2, 3] + [9, 10] # ### Срезы (slices) # In[ ]: print(age) # In[ ]: age[1:3] # левый конец включается, а правый нет # In[ ]: print(age[1:]) print(age[3:]) print(age[:2]) # In[ ]: age[:] # опускаем все индексы # In[ ]: age[2:2] # пустой срез # ### Изменение списков # На данный момент мы достаточно хорошо познакомились со списками. Но списки не так просты, как кажется. Давайте попробуем сделать следующее: скопировать один список в другой путем присваивания. # In[ ]: L1 = [1, 8, 9, 4] L2 = L1 # сохранили список L1 в L2 print(L1) print(L2) # In[ ]: L2[3] = 5 print(L2) print(L1) # In[ ]: # дубль два L1 = [1, 8, 9, 4] L2 = L1.copy() # теперь делаем что угодно L2[3] = 100 print(L1) print(L2) # все нормально # ### Цикл `for` # # Раз есть списки, хочется научиться пробегаться по их элементам. Например, выводить на экран не весь список `age` сразу, а постепенно, каждый элемент с новой строчки. Для этого есть циклы. Рассмотрим цикл `for`. # In[ ]: for i in age: print(i) # In[ ]: list1 = [1, 3, 5, 9] list2 = [] # новый список for l in list1: list2.append(l * 2) # добавляем в него значения из list1, умноженные на 2 print(list2) # In[ ]: # создадим список с номерами дней days = [2, 3, 4, 5, 6, 7, 8, 9, 10] # начальное значение времени, которое питон проводит на солнце time = 1 print(1, time) # теперь будем изменять значение time в цикле # и выводить на экран номер дня и время for d in days: time = time + 3 print(d, time) # ### Функция `range()` # In[ ]: # пример for j in range(0, 6): print(j) # In[ ]: time = 1 print(1, time) for d in range(2, 11): time = time + 3 print(d, time) # In[ ]: range(0, 3) # не поспоришь, но бесполезно # In[ ]: list(range(0, 3)) # значения внутри range # In[ ]: list(range(5))