#В списки можно втроить другие списки
#Индекс первого элемента - 0
lis = [23, 15, 's', ['h', 'e', '1',]]
print(lis)
print(lis[2])
print(lis[3])
print(lis[3][1])
print("\n")


for i in lis:
	print(i)


for i in range(0, 4):
	lis[i] *= 2
print(lis)

#Добавление элемента в список
lis.append(2011)
print(lis)

#Удаление элемента из списка
#по значению
lis.remove(46)
print(lis)
#по индексу
lis.pop(0)
print(lis)

#Вставка элемента в определённое место
#1 - индекс, 9 - элемент
lis.insert(1, 9)
print(lis)

#Узнать индекс элемента
print(lis.index(9))

#Вывод элементов в конце списка
print("Индекс числа", lis[-1]," = ", lis.index(2011))

#Вывод определённой части списка (Среза) (Старт:финиш:шаг)
print(lis[1:-2:1])
print(lis[2:])
print(lis[2:len(lis)])

#Очистка списка
lis.clear()
print(lis)

#В списки можно вкладывать списки, тем самым создавая матрицы
M = [[1, 2, 3],
	 [4, 5, 6],
	 [7, 8, 9]]
print('\n', M)

#Генератор, возвращающий суммы элементов строк
G = (sum(elements) for elements in M) 
#Вызов в соответствии с протоколом итераций
print(next(G))
print(next(G))
#То же, но по другому
summ = list(map(sum, M))
print(summ)

#Вывод столбца
#Получить  элементы row[1]  из  каждой  строки  матрицы M  исоздать  из  них  новый  список
#Здесь переменной row присваивается элемент списка M (который сам является списком), а переменной col2
#присваивается 2 элемент списка row. И так для каждого элемента списка M.
col2 = [row[1] for row in M]
print(col2)

#Генератор списков
doubles = [c * 2 for c in 'spam']
print(doubles)